.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> |
參考: http://msdn.microsoft.com/en-us/magazine/jj991977.aspxasync