以async/await 取代 coroutine

StartCoroutine(Method()) -> Method()

IEnumerator Method() -> async void Method()

yield return WaitMethod() -> await WaitMethod()
其中WaitMethod必須宣告為 async Task WaitMethod()
(僅有async Task 開頭的method才能夠被 await 等待)

●直接呼叫 async void / async Task 差別
僅有呼叫void的,才能夠具有Catch Exception 功能 , 通常也會有黃字提醒coding warning
因此通常要以一層 async void 包覆 async Task 來進行新線呈的呼叫
而這部分也可直接寫成擴增方法來使用, 例如: Method().WarpErrors();
public static async void WrapErrors(this Task task){await task;}
或者是

 

多線呈控制

ConfigureAwait 用於進入新的 thread, 使該await 以後的程式碼都是新thread中執行
await DelayUseAsync().ConfigureAwait(false);
await Task.Run(() => {}).ConfigureAwait(false);