2021年3月22日 星期一

將同步方法調整為非同步

有時候,會需要將既有的同步的方法改成非同步,尤其在 .net core 的環境下,

非同步已成顯學,不支援非同步的函式就是不夠潮。



一個非同步函式會需要宣告關鍵字 async ,若該方法使用了 async ,則內容

需要有一個至多個的 await 對應,故 async 、await 為成對的存在。


但有時候需要被呼叫的函式就是同步的存在,或是單元測試;值得注意的是

若該方法明顯為同步實作時,不需要 async 


以下分幾個情境


沒有回傳值的同步函式使用:Task.CompletedTask


如下範例,設計一個 透過 Console 印出字串,可以看到在方法內容最後使用

Task.ComletedTask 回傳,需要注意 WriteLineAsync 方法不使用async 關鍵字


另外,其實 Task.CompletedTask 是 .net 4.5 才推出的,故也可以使用 Task.Run,

如下圖



有回傳值得同步函式使用:Task.FromResult<T>()


如下範例,設計一個有回傳值的方法 GetPerson ,直接使用 FromResult 方法

回傳值,同樣的 GetPersonAsync 方法不使用 async



最後,需要注意的以上程式碼中,在方法 Main 是需要加入 async 關鍵字


沒有留言:

張貼留言