c# - TPL .ContinueWith 在执行大量任务时优先

标签 c# .net multithreading asynchronous task-parallel-library

我正在尝试按特定顺序 (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/

相关文章:

c# - XDocument 保存后 XML 文件中的额外字符

python 2 定时器不遵循顺序

c - 如何在c/c++中异步运行线程的特定功能?

Android SurfaceView Canvas 用线程绘制

c# - 自定义属性的构造函数何时运行?

c# - 如果发生任何异常,如何使 Task.WaitAll() 中断?

c# - 在企业门户中托管时的 Silverlight 4 OOB 更新过程

c# - 输入字符串错误

c# - Action 的通用约束没有按预期工作

.net - 使用.Net 创建快捷方式