首页 > 代码库 > .NET Async/Await 最佳实践

.NET Async/Await 最佳实践

.NET 异步编程Guildlines

名称描述例外
Avoid async voidPrefer async Task methods over async void methodsEvent handlers
Async all the wayDon’t mix blocking and async codeConsole main method
Configure contextUse ConfigureAwait(false) when you canMethods that require con­text

 

常见异步编程问题解决方案

问题方案
创建任务执行代码使用Task.Run或TaskFactory.StartNew(不new一个Task或Task.Start)
创建一个对操作或事件的任务包装使用TaskFactory.FromAsync或TaskCompletionSource<T>
支持协作式取消任务CancellationTokenSource 或 CancellationToken
报告进度IProgress<T> 或 Progress<T>
处理数据流TPL Dataflow 或 Reactive Extensions
共享资源的同步访问信号量(SemaphoreSlim)
异常初始化资源AsyncLazy<T>
支持以异步的生产者/消费者结构TPL Dataflow or AsyncCollection<T>

 

参考: http://msdn.microsoft.com/en-us/magazine/jj991977.aspx

.NET Async/Await 最佳实践