我需要对 Web 服务进行一系列调用以获取一组节点计数。我正在并行、异步地进行所有调用。发起呼叫后,我将结果汇总如下:
//pendingTasks is List<Task<int>>
int sum = 0;
foreach (var task in pendingTasks)
{
sum += await task;
if (sum > 100) break;
}
休息是因为我不在乎超过 100 后的具体计数。
首先,像这样跳出循环有危险吗?留下待处理的任务是不是很糟糕?它会造成任何形式的内存泄漏吗?
其次,个别调用相当不一致。如果第一个电话是最长的电话,我会讨厌它,并且我最终会等待它,即使所有后续电话的总和都超过 100。当个别结果返回时,将其添加到总和中会很好,在命令他们收到。我以前用过WhenAll
,我很确定WhenAny
是我想要的,但我不太确定在这种情况下如何使用它,我想在它们进入时处理多个,然后在它们全部完成时终止.