Tôi đang đọc lên thêm về async ở đây: http://msdn.microsoft.com/en-us/library/hh873173(v=vs.110).aspxExceptions Chụp về hoạt động async
Đi qua ví dụ này:
Task<bool> [] recommendations = …;
while(recommendations.Count > 0)
{
Task<bool> recommendation = await Task.WhenAny(recommendations);
try
{
if (await recommendation) BuyStock(symbol);
break;
}
catch(WebException exc)
{
recommendations.Remove(recommendation);
}
}
Tôi tự hỏi, nếu tôi đã biểu diễn đang chờ đợi trên Task.WhenAny
tại sao tôi cần phải chờ đợi một lần nữa bên trong khối thử?
Nếu tôi đã làm điều này: Task<bool> recommendation = await Task.WhenAny(recommendations);
Tại sao làm điều này: if (await recommendation) BuyStock(symbol);
Điều này sẽ ném một 'AggregateException', không phải là' WebException', nếu 'Task' bị lỗi do kết quả của' WebException'. – Servy
@Servy đã làm rõ điều đó. – i3arnon
Bây giờ bạn đã đề cập rằng có sự khác biệt, nhưng bạn vẫn bị hỏng mã do thay đổi của bạn, bởi vì bạn đã thay đổi lỗi xử lý ngữ nghĩa theo cách mã không hỗ trợ. Điểm mấu chốt của câu trả lời của bạn, rằng bạn chỉ có thể thay đổi mã để sử dụng 'Kết quả', vốn đã sai, bởi vì bằng cách thực hiện thay đổi đó bạn đã phá vỡ mã. Có một lý do * rất tốt * rằng tác giả của mã này đã sử dụng 'await' ở đây. – Servy