【发布时间】:2020-06-08 02:20:03
【问题描述】:
我想实现一个由预定数量(比如说 10 个)无限期运行的异步任务组成的池。
使用 Task.WhenAll,我可以轻松启动 10 个任务,将它们输入一个列表,然后在此列表上调用 await Task.WhenAll(list)。一旦方法返回,我可以在接下来的 10 个元素上重新开始整个过程。我用这个解决方案面临的问题是它在循环之前等待最长的任务完成,这不是最优的。
我想要的是,每当完成一项任务时,就会开始一项新任务。超时也会很好,以防止任务在失败的情况下无限期地运行。
有什么简单的方法吗?
【问题讨论】:
-
您是否考虑过
WhenAny而不是WhenAll? -
请分享您的代码
-
这可能是
TPL DataFlow的工作吗? -
答案已经很老了,但是从那时起,TPL 唯一真正改变的就是添加了
async/await。
标签: c# async-await