.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 context |
常见异步编程问题解决方案
| 问题 | 方案 |
| 创建任务执行代码 | 使用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> |
浙公网安备 33010602011771号