2019年3月17日 星期日

Async Await 筆記

Async Await 筆記

一個有標示 Async 的方法,.Net規定可以回傳的類別必需是

  • void:使用的人其實不知道裡面有呼叫await,因此程式的流程會呼到方法裡面後,一直到await的地方後。這個方法對呼叫者來說就結束了,呼叫者會繼續執行後面的流程。至於在方法中await後面的code,會再呼叫者的緒有空時,再繼續執行。
    • 由於是void,外面的人也無從得知裡面是否await,所以外面就想成是一個方法,這個方法執行到某個地方就會丟一個Task出去,應該方法可能很快就結束,等到Task結束,可能這個方法又會跑起來做完後面的事。
  • Task:當方法沒有任何回傳值,可是希望裡面的code跑到await時,外面也可以一起await,不要繼續往下等,就可以用Task做為回傳值。值得注意的事,就算在程式中沒有寫任何的return,也可以直接在方法的回傳值那邊加上Task。如下所示是合理的
async Task fnNoReturn()
{
  await Task.Delay(1000);
}
  • Task:相較於回傳Task,沒有任何return值。若是真的有return,就可以用Task來代表回傳值,這樣外面可以等,也可以取值。

結論

方法有標示Async,就怎麼樣也讓它回傳Task,這樣外面才有機會等。除非是UI的EventHandler

沒有留言:

張貼留言