AsyncEx - async/await 的辅助库

简介

AsyncEx - async/await 的辅助库

安装

使用Nuget安装Nito.AsyncEx.

使用

AsyncLock

构造AsyncLock函数可以采用异步等待队列;传递自定义等待队列以指定您自己的排队逻辑。

private readonly AsyncLock _mutex = new AsyncLock();
public async Task UseLockAsync()
{
  // AsyncLock can be locked asynchronously
  using (await _mutex.LockAsync())
  {
    // It's safe to await while the lock is held
    await Task.Delay(TimeSpan.FromSeconds(1));
  }
}

AsyncContext

该AsyncContext类型提供了执行异步操作的上下文。await关键字需要返回一个上下文。对于大多数客户端程序,这是一个 UI 上下文;对于大多数服务器程序,这是一个线程池上下文.AsyncContextThread是一个单独的线程或任务,它运行AsyncContext. AsyncContextThread不是从Thread类派生的。AsyncContext线程在创建后立即开始运行。AsyncContextThread将一直停留在其循环中,直到另一个线程调用JoinAsync. 处置 anAsyncContextThread也会要求它退出

class Program
{
  static async Task<int> AsyncMain()
  {
    ..
  }

  static int Main(string[] args)
  {
    return AsyncContext.Run(AsyncMain);
  }
}

AsyncMonitor

在监视器中,任务可能决定通过调用来等待信号WaitAsync。在等待期间,它会暂时离开监视器,直到收到信号并重新进入监视器。返回的任务EnterAsync将进入Completed监视器后的状态。如果在等待满足之前发出信号,则相同的任务将进入Canceled状态;CancellationToken在这种情况下,该任务不会进入监视器。

返回的任务WaitAsync会Completed在收到信号后进入状态,重新进入监视器。如果在等待满足之前发出信号,则相同的任务将进入Canceled状态;CancellationToken在这种情况下,任务将等待进入Canceled状态,直到它重新进入监视器。请记住,从WaitAsync被调用到其返回任务完成的时间,调用任务已经离开了监视器。

AsyncEx - async/await 的辅助库

Github地址

https://github.com/StephenCleary/AsyncEx