我们在实现一种异步版本的ManualResetEvent_c#,windows_黄腾霄的博客-CSDN博客给大家介绍了异步版本的ManualResetEvent。这里我们自己实现一个异步版本的AutoResetEvent
这里是我们创建的异步版本的AutoResetEvent。
实现方式和之前的异步版本ManualResetEvent基本相同,也是使用了一个TaskCompletionSource。
public class AutoResetEventAsync
{
/// <summary>
/// 提供一个信号初始值,确定是否有信号
/// </summary>
/// <param name="initialState">true为有信号,所有等待可以直接通过</param>
public AutoResetEventAsync(bool initialState)
{
_isSignaled = initialState;
}
/// <summary>
/// 异步等待一个信号,需要await
/// </summary>
/// <returns></returns>
public Task WaitOneAsync()
{
lock (_locker)
{
if (_isSignaled)
{
_isSignaled = false;
return CompletedSourceTask;
}
var source = new TaskCompletionSource<