简介
AsyncEx - async/await 的辅助库
安装
使用Nuget安装Nito.AsyncEx
使用
AsyncLock
构造AsyncLock函数可以采用异步等待队列;传递自定义等待队列以指定您自己的排队逻辑。
private readonly AsyncLock _mutex = new AsyncLock();
public async Task UseLockAsync()
{// AsyncLock can be locked asynchronouslyusing (await _mutex.LockAsync()){// It's safe to await while the lock is heldawait 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被调用到其返回任务完成的时间,调用任务已经离开了监视器。
Github地址
https://github.com/StephenCleary/AsyncEx
最后大家如果喜欢我的文章,还麻烦给个关注并点个赞, 希望net生态圈越来越好!