[英]When to use Task in Interface Methods in C#?
您顯然知道某些接口方法將是async
,例如將從磁盤讀取的實現,您可以輕松決定使用Task
。 還有一些接口方法可能使用async
,你也可以讓它們返回Task
。
我不禁將Task
視為實現細節,當我不確定實現是否是async
/將使用async
方法時,我猶豫是否將Task
放在我的接口上。 如果我決定不使用Task
,則實現方法在需要時不能是async
的。
雖然根據實現的需求來調整合約感覺很奇怪,但這是我會做的。 這是正確的方法嗎?
這是正確的方法嗎?
是的。 如果您知道有時會有機會異步,請使用Task
。
這仍然讓您有機會不這樣做,因為接口不能要求使用async
- 它只能要求Task
或Task<T>
的返回類型。
如果您最終不需要異步執行任何操作,則可以使用Task.FromResult()
來返回已完成的帶有值的Task
。 例如:
protected override Task<int> SomeMethod() {
return Task.FromResult(1);
}
或者Task.CompletedTask
如果沒有返回值。
否則,如果您沒有將Task
指定為返回類型,並且您想要異步執行某些操作,那么您有兩個選擇:
async void
(如果方法返回void
),這可能會導致其他並發症。 在不需要異步運行的情況下,所有這些都是比返回已完成Task
更糟糕的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.