【发布时间】:2017-01-05 21:18:14
【问题描述】:
我想向 X 个不同的 Web 服务发出请求,它们将分别返回 true 或 false。
这些任务应该并行执行,我想等待第一个以真实值完成的任务。当我收到一个真值时,我不希望等待其他任务完成。
在下面的示例中,t1 不应等待,因为t3 先完成并返回true:
var t1 = Task.Run<bool>(() =>
{
Thread.Sleep(5000);
Console.WriteLine("Task 1 Excecuted");
return true;
}, cts.Token);
var t2 = Task.Run<bool>(() =>
{
Console.WriteLine("Task 2 Executed");
return false;
}, cts.Token);
var t3 = Task.Run<bool>(() =>
{
Thread.Sleep(2000);
Console.WriteLine("Task 3 Executed");
return true;
}, cts.Token);
基本上我正在寻找带有谓词的Task.WhenAny,当然它不存在。
【问题讨论】:
-
@AdamPlocher 这个问题在
async-await环境中不太相关。 -
我感觉这里某处有一个 TPL DataFlow 解决方案,希望我有时间坐下来玩一下!
标签: c# .net task-parallel-library async-await