[英]What happens when calling an async method without await?
我想知道如果我在沒有使用await的情況下調用標記為async的方法會發生什么。 考慮這個例子:
private int id = 0;
async Task Initialize()
{
var content = await LoadFromDisk(id);
await Process(content);
return;
}
DataId
{
get { return id; }
set { id = value; Initialize(); }
}
我知道這會產生編譯警告,但我的問題是,如果在Initialize()中等待的方法調用仍然可以像預期的那樣工作。 正如您所看到的那樣,setter不需要等待Initialize(),因為沒有返回值,它是屬性的setter的最后一次調用。 這是一種火,忘了。
我想這樣做的原因是我想將MVVM和數據后端結合起來,迫使我使用異步方法。
在上面的示例中,用戶從列表中選擇條目,程序應該在視圖的另一部分中顯示有關條目的詳細信息。
我想將列表的當前選定條目綁定到DataId,每當用戶更改選擇時,它都會更新詳細信息視圖。 當然,可以從事件處理程序執行異步方法調用,但為了更清晰的MVVM實現(主要使用數據綁定),我想避免使用事件處理程序。
如果在不等待任務的情況下調用async Task
方法,則將以靜默方式忽略該方法的任何異常。 如果你調用async void
方法(你在問題標題中提到,但你的代碼沒有這樣做),那么將在SynchronizationContext
上重新引發該方法的任何異常 - 在這種情況下,直接發送到UI主循環。
我有關於異步屬性的博客文章。 最后一節介紹NotifyTaskCompletion
類型 ,該類型專為異步數據綁定而設計。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.