2017-05-31 25 views
0

下面定義的方法不能返回任何東西。那麼如何將 納入正常的語法中,這種方法必須返回「任務」。 因此,當「異步」被刪除時,下面的方法將不會編譯。具有「異步」和返回類型非泛型「任務」的方法的奇怪定義?

static async Task MyAsyncMethod() { } 

此外,當你調用該方法:

await MyAsyncMethod(); 

「伺機」應該awaitable對象上調用,但這裏的回報 類型是「結構太虛」,這是不是awaitable

+0

如果異步被刪除它將編譯,如果你真的返回任務。並非我建議在大多數情況下這樣做。不管怎樣,你真正的問題是什麼?我在標題中看到一個問號,但不是真正的問題。只是一個觀察。 – mason

+0

您返回一個'Task',因爲這是運行時如何確定異步操作何時完成的。如果你簡單地將它標記爲「void」,而它將被編譯,它將被視爲「火和遺忘」,並且在執行其他邏輯之前無法等待該任務完成。火和忘記語義保留給事件處理程序(例如按鈕點擊)。 –

+0

這一點是語法一致性。當語法說回到「任務」,但實際上它取決於其他修飾符,那麼我們需要解釋它 –

回答

2

您可以

public async Task DoAsync() 
{ 
    // do anything synchron here 
    // await other Task 
} 

public Task DoAsync() 
{ 
    // do anything synchron here 
    return Task.CompletedTask; 
} 

public Task DoAsync() 
{ 
    // do anything synchron here 
    return Task.FromResult(false); 
} 
相關問題