.NET Async/Await 最佳实践

.NET 异步编程Guildlines编程

名称 描述 例外
Avoid async void Prefer async Task methods over async void methods Event handlers
Async all the way Don’t mix blocking and async code Console main method
Configure context Use ConfigureAwait(false) when you can Methods 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.aspxasync

相关文章
相关标签/搜索