我在書中讀到了關於下面的區別。等待Task(ReadFromIO)並等待Task.WhenAll(task1,task2)之間的區別;
private async Task GetDataAsync() {
var task1 = ReadDataFromIOAsync();
var task2 = ReadDataFromIOAsync();
// Here we can do more processing
// that doesn't need the data from the previous calls.
// Now we need the data so we have to wait
await Task.WhenAll(task1, task2);
// Now we have data to show.
lblResult.Content = task1.Result;
lblResult2.Content = task2.Result;
}
private async Task GetDataAsync() {
var task1 = ReadDataFromIOAsync();
var task2 = ReadDataFromIOAsync();
lblResult.Content = await task1;
lblResult2.Content = await task2;
}
我明白在第一個方法的await語句中發生了什麼。但對於第二個,儘管我理解了邏輯,但我無法理解第二個實現與第一個實現相比的缺陷。在書中,他們提到編譯器重寫這個方法兩次。我所理解的是因爲兩個等待電話,可能比第一個電話時間延遲更多,因爲我們在此分別呼叫等待每個任務。有人能以更好的方式解釋我嗎?