3 回答

TA貢獻1807條經驗 獲得超9個贊
總體思路是正確的-該方法的其余部分被制成各種形式的延續。
在“快速通道”的博客文章有如何的細節async/ await編譯器改造工程。
差異,浮現在腦海:
該await關鍵字還使用“調度環境”的概念。調度上下文是(SynchronizationContext.Current如果存在的話),返回TaskScheduler.Current。然后,繼續在調度上下文上運行。因此,如果需要的話,可以更近似地傳遞TaskScheduler.FromCurrentSynchronizationContext給ContinueWith,然后再回落TaskScheduler.Current。
實際async/ await實現基于模式匹配;它使用“等待”模式,該模式允許等待任務以外的其他事情。例如WinRT異步API,某些特殊方法(例如YieldRx observables和特殊套接字可等待),它們對GC的影響不那么嚴重。任務功能強大,但并不是唯一可以等待的任務。
還有一點細微的挑剔的區別:如果等待已完成,則該async方法實際上不會在此時返回;它同步地繼續。因此,這有點像傳遞TaskContinuationOptions.ExecuteSynchronously,但是沒有與堆棧相關的問題。

TA貢獻1829條經驗 獲得超9個贊
異步/等待比ContinueWith(...)更具表現力的另一個例子是異常的流動。您可以在同一個try塊中等待多次,對于執行的每個階段,可以將它們的異常集中到同一catch(...)塊中,而不必編寫大量的代碼來明確地執行此操作。
- 3 回答
- 0 關注
- 288 瀏覽
添加回答
舉報