2012-08-28 70 views
12

說我有一個接口如何在一個空的接口方法使用異步

interface IFoo { 
    Task SomeMethodAsync(); 
} 

,我想實現這個接口,但是對於一個類中的方法爲空。

我應該生活在這樣的警告嗎?

async Task SomeMethodAsync() {} 

或者我應該讓它返回一些虛擬任務?

async Task SomeMethodAsync() { await Task.Run(() => {}); } 

或者還有其他的選擇嗎?

另外我想實現這個方法作爲一個明確的接口方法。這有什麼區別嗎?

+0

[Interfaces and async methods]的可能重複(http://stackoverflow.com/questions/13573516/interfaces-and-async-methods) – abatishchev

回答

14

返回的方法Task不必是async

我建議是這樣的:

Task IFoo.SomeMethodAsync() 
{ 
    return Task.FromResult(true); 
} 

我假設,如果這是一個同步的方法,你只會有一個空的方法體;這是相當於空方法體的async

2

它只取決於你如何決定框架必須處理這種情況。

你,國際海事組織,有幾個選項:

  • 拋出一個異常(將打破immidiately執行,你必須手柄它在執行鏈一些地方一些方法)。

  • 回報default-value(也可以通過您所提供的解決方案:只是一個空洞的任務沒有做什麼不好,這是我稱之爲功能期待它的東西,它不通知我一下任何事情但是我也不會做任何事情。海事組織,這是不好的設計。

  • 回報一些not-valid-value,其截獲了來電顯示主叫方如此「知道」的東西也不行

0

我遇到了一個抽象基類。我試圖斯蒂芬·克利裏的方法,但是漸漸在C#6

我的基礎方法的一個例子編譯器錯誤:

protected abstract Task OnFoo(Bar bar); 

這是我在我的派生類中要做到:

protected override async Task OnFoo(Bar bar) 
{ 
    await Task.FromResult(true); 
} 

其他答案的問題是短語中的return關鍵字。由於Task的返回值本質上是void,因此無法返回任何內容。此外,await關鍵字是必需的。

相關問題