簡體   English   中英

C#的接口方法中什么時候使用Task?

[英]When to use Task in Interface Methods in C#?

您顯然知道某些接口方法將是async ,例如將從磁盤讀取的實現,您可以輕松決定使用Task 還有一些接口方法可能使用async ,你也可以讓它們返回Task

我不禁將Task視為實現細節,當我不確定實現是否是async /將使用async方法時,我猶豫是否將Task放在我的接口上。 如果我決定不使用Task ,則實現方法在需要時不能是async的。

雖然根據實現的需求來調整合約感覺很奇怪,但這是我會做的。 這是正確的方法嗎?

這是正確的方法嗎?

是的。 如果您知道有時會有機會異步,請使用Task

這仍然讓您有機會不這樣做,因為接口不能要求使用async - 它只能要求TaskTask<T>的返回類型。

如果您最終不需要異步執行任何操作,則可以使用Task.FromResult()來返回已完成的帶有值的Task 例如:

protected override Task<int> SomeMethod() {
    return Task.FromResult(1);
}

或者Task.CompletedTask如果沒有返回值。

否則,如果您沒有將Task指定為返回類型,並且您想要異步執行某些操作,那么您有兩個選擇:

  1. 在您的實現中使用同步方法,
  2. 如果沒有同步方法可用於您想做的事情(這越來越普遍),那么您要么必須:
    • 在異步方法上同步阻塞,或
    • 使用async void (如果方法返回void ),這可能會導致其他並發症。

在不需要異步運行的情況下,所有這些都是比返回已完成Task更糟糕的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM