3 回答

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

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