我正在尝试按特定顺序 (FIFO) 执行大量异步工作。
代码如下:
foreach (var header in headers)
_broker.SendAsync(header.request)
.ContinueWith(t => _broker2.SendAsync(t.Result.request2));
我遇到的问题是,在所有 _broker.SendAsync 完成之前不会发生 Continuation。我希望它按顺序工作,即在任何代理完成发送后立即运行 ContinueWith。
这有什么意义吗?
最佳答案
ContinueWith
在先行词准备就绪后立即触发。在您的代码中,没有任何强制顺序执行的内容。事实上,TPL 怎么可能知道它是从 foreach
循环调用并延迟执行的?它无法知道。
您可能误解了所见。也许 broker2
在内部强制串行执行?没有更多信息无法判断。
考虑将循环体移动到辅助函数中并在那里使用 async/await
。更易于使用。
关于c# - TPL .ContinueWith 在执行大量任务时优先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24166065/