有時候,會需要將既有的同步的方法改成非同步,尤其在 .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 關鍵字
沒有留言:
張貼留言