詳解
GetDataAsync方法實際上就會被編譯成:public Task<int> GetDataAsync(){ var stateMachine = new StateMachine(); stateMachine.MoveNext(); return stateMachine.ResultTask;}上麵的 CreateIncompleteTask和 CompleteTask隻是為了說明原理而使用的偽代碼
。但現實中存在大量依賴特定係統線程的 API
,整個調用鏈中根本沒有創建任何 Task對象,額外的 Continuation 也走寄存器,
async/await 機製本質上是利用 CPS(Continuation Passing Style)變換來實現的。把原始的異步控製流直接交給 JIT 處理不就行了嗎?於是 Runtime Async 就誕生了 。當異步調用沒有真正發生暫停時 ,
另外,說明被調用的 Fib沒有同步完成。下麵會解釋 。並且調用鏈越深性能提升還會越大!
JIT 才會在這一刻真正創建保存當前執行狀態所需要的 Continuation
功成身退網