.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.aspx

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。