我想向X个不同的Web服务提出请求,每个Web服务将返回true
或false
。TPL等待任务以特定返回值完成
这些任务应该并行执行,我想等待第一个完成与真正的价值。当我收到真正的价值时,我不希望等待其他任务完成。
在下面的例子中,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
有谓语,这当然是不存在的。
http://stackoverflow.com/questions/14726854/task-parallel-library-waitany-with-specified-result –
@AdamPlocher该问题在'async-await'环境中不太相关。 – i3arnon
我在这里感受到TPL DataFlow解决方案,希望我有时间坐下来玩玩! –