|
|
1
159
背后的全部想法
你可以堵住
你能做的就是利用
TPL Dataflow
而不是
具体来说,您的代码可以使用
代码中:
尽管您可能希望限制
与您的代码相比(如果它有效的话)还有一个额外的好处,那就是编写工作将在单个项目完成后立即开始,而不是等到所有的处理完成。 |
|
|
2
122
svick's answer (像往常一样)很好。
但是,我发现数据流在实际需要传输大量数据时更有用。或者当你需要
在您的情况下,一个更简单的解决方案是使用
|
|
|
3
77
像svick建议的那样使用数据流可能是过分的,Stephen的回答并没有提供控制操作并发性的方法。然而,这可以简单地实现:
这个
编辑 SO用户和TPL wiz同事 Eli Arbel related article from Stephen Toub . 与往常一样,他的实现既优雅又高效:
|
|
|
4
36
你可以用新的 AsyncEnumerator NuGet Package ,这在4年前问题最初发布时并不存在。它允许您控制并行度:
免责声明:我是AsyncEnumerator库的作者,该库是开源的,并在麻省理工学院获得许可,我发布此消息只是为了帮助社区。 |
|
5
15
包裹
(您需要执行任务。运行thing以不阻止UI线程) 像这样的:
|
|
|
6
7
这应该是相当有效的,而且比让整个TPL数据流正常工作更容易:
|
|
7
4
我来晚了一点,但您可能想考虑使用GetAwaiter.GetResult()在同步上下文中运行异步代码,如下所示;
|
|
|
8
3
一种扩展方法,它利用信号量限制并允许设置最大并行度
示例用法:
|
|
9
3
这里发生的事情是:我们将源集合分成10个块(
但它需要一个
预防
:如果您的源集合太大,它将计划
上述示例中使用的扩展方法如下:
|