[英]Is there a way to trigger 2 tasks, await for one to complete (without cancelling the other task) and then set a time before returning result
我正在現有的應用程序中實現一項新功能,並且想知道如何才能最好地實現以下目標:
我有#1至#3但#4的解決方案。
List<Task> tasks = new List<Task>(length);
tasks.Add(CreateTask(get_data_source));
await Task.WhenAny(tasks);
我不想在#3中提供任何超時。 但我想等到任務完成后再觸發計時器t秒鍾。 t秒后,返回結果(如果兩個都完成,則其他兩個都只是完成的任務)。
在第一個任務完成后,您可以等待任何剩余任務或延遲任務完成。
這將使您有可能等待5秒鍾,其他任務才能完成,否則請返回結果。
var tasks = new List<Task>
{
CreateTask(get_data_source),
CreateTask(get_data_source2)
};
var completedTask = await Task.WhenAny(tasks);
await Task.WhenAny(Task.WhenAll(tasks), Task.Delay(5000));
// Return result
對於Task.WhenAll(),這可能是個好地方。 當所有任務完成時,它將返回。 這樣,您可以等待所有任務響應,而不必等待一段時間。
另一個示例,使用CancellationToken
和CancellationTokenSource.CancelAfter
var ts = new CancellationTokenSource();
var list = Enumerable.Range(0, 4)
.Select(x => DoStuff(ts.Token))
.ToList();
await Task.WhenAny(list);
ts.CancelAfter(1000);
await Task.WhenAll(list);
這將有助於如果你的任務是使用CancellationTokens
幫助關閉它們勇退
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.