dav*_*d.s 3 c# asynchronous async-await
我想知道返回的至少一个结果是否GetDataFromLongRunningOp满足特定条件:
foreach (var item in list)
{
var result = GetDataFromLongRunningOp(item);
if (CheckCondition(result))
{
return true;
}
}
return false;
Run Code Online (Sandbox Code Playgroud)
如何并行调用GetDataFromLongRunningOp每个项目,以减少查找答案所需的总时间?
编辑:GetDataFromLongRunningOp是一种异步方法。
GetDataFromLongRunningOp使用异步运行Task.Run。使用 a TaskCompletionSource,当返回满足条件的结果时,将返回已完成的任务。如果没有结果满足条件则tcs.Task永远不会完成。您需要另一个任务来等待所有任务完成。所以,最后,您需要等待tcs.Task或Task.WhenAll完成。
var result = false;
var tasks = new List<Task>();
var tcs = new TaskCompletionSource<bool>();
foreach (var item in list)
{
var task = Task.Run(() => GetDataFromLongRunningOp(item))
.ContinueWith(t =>
{
if (CheckCondition(t.Result))
{
result = true;
tcs.TrySetResult(true);
}
});
tasks.Add(task);
}
await Task.WhenAny(tcs.Task, Task.WhenAll(tasks));
return result;
Run Code Online (Sandbox Code Playgroud)