所以我有一個定義了一些函式的介面,包括這樣的函式
Task DoWork() 。
問題是,一些實作這個介面的類不需要異步地做作業,所以我目前的解決方案是在做完一些同步作業后回傳Task.CompletedTask。
問題是:我的方法是否錯誤,我覺得讓一個異步函式來做同步作業是一種錯誤的做法
。uj5u.com熱心網友回復:
它可能感覺是錯誤的--它甚至可能是錯誤的,但錯誤性并不在你這邊。
如果一個方法被定義為回傳一個任務,那么這要么是你實作了該方法的一個特殊情況,在這個特殊情況下,該方法不需要是異步的......要么就是該方法的定義是錯誤的,它不應該回傳一個任務。
這就是語意上的挑戰。但你將其實作為 Task.CompletedTask,在這種情況下,實際上你只是遵循了 C# 規范所規定的語意。
通過一個具體的例子,我們可以討論這個方法是否應該回傳一個任務......但一般來說。這種情況會發生。為什么你認為Task.CompletedTask存在呢?
uj5u.com熱心網友回復:
如果你對介面的使用要求該操作是異步的,那么沒有錯。Task.CompletedTask作為C#語言的一部分被提供是有原因的。重要的是要反思對它的使用,以及你是否真的做錯了什么,或者只是符合你的介面所定義的契約,而你問這個問題似乎是在做這個。
如果您發現自己在介面實作中經常重復這種模式,那么也許這是一個重新思考您的架構的機會:為什么您的介面有時同步運行,有時異步運行,以及您如何更好地設計一個系統來處理一個需要異步作業的具體實作與一個不需要異步運行的具體實作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/318040.html
標籤:
上一篇:【歷史上的今天】10 月 15 日:FORTRAN 語言正式問世;支付寶誕生第一筆交易;Tcl 語言發明者出生
下一篇:子組件沒有收到傳遞的道具
