建议改进的写法:
- 删除lock语句并将
Reset内部的逻辑改为CAS替换TaskCompletionSource实例
- 给
TaskCompletionSource<bool> _source添加volatile关键字
可以参考 QuikSharp实现的AsyncManualResetEvent, 这比较通用的做法.
上面代码文件中提到的MSDN博客链接由于MSDN的退役而失效了, 但这里有归档.
改写后经过测试, 项目中当前存在的单元测试都可通过.
我会提交一个PR, 如果觉得可以的话, 是否可以合并一下, 谢谢.