ฉันกำลังอ่าน " Concurrency in C # Cookbook " โดย Stephen Cleary และสังเกตเห็นเทคนิคต่อไปนี้:
var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
if (completedTask == timeoutTask)
return null;
return await downloadTask;
downloadTask
คือเรียกร้องให้httpclient.GetStringAsync
และกำลังดำเนินการtimeoutTask
Task.Delay
ในกรณีที่ไม่หมดเวลาแสดงว่าdownloadTask
เป็นที่เรียบร้อยแล้ว เหตุใดจึงจำเป็นต้องรอเป็นครั้งที่สองแทนที่จะกลับมาdownloadTask.Result
เนื่องจากงานเสร็จเรียบร้อยแล้ว
AggregateException
โดยResult
เทียบกับข้อยกเว้นแรกExceptionDispatchInfo
ด้วยawait
) กล่าวถึงรายละเอียดเพิ่มเติมใน "Task Exception Handling ใน. NET 4.5" ของ Stephen Toub: blogs.msdn.com/b/pfxteam/archive/2011/09/28/… )
downloadTask
และtimeoutTask
? พวกเขาทำอะไร?