ฉันกำลังอ่าน " Concurrency in C # Cookbook " โดย Stephen Cleary และสังเกตเห็นเทคนิคต่อไปนี้:
var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
if (completedTask == timeoutTask)
return null;
return await downloadTask;
downloadTaskคือเรียกร้องให้httpclient.GetStringAsyncและกำลังดำเนินการtimeoutTaskTask.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? พวกเขาทำอะไร?