TPL数据流选择阻止将项目发布到其中

时间:2014-04-30 18:51:07

标签: c# .net task-parallel-library block tpl-dataflow

请查看下面的我的TPL Dataflow网络方案。 有一个URL列表,一些Load块和一个Parse块。 加载块加载具有不同代理服务器的HTML页面,并且所有这些都链接到发生CPU绑定工作的Parse块。如果页面加载期间出现异常,则URL会重新添加到列表中。

我将URL发布到带有手工循环的加载块(在图片上)。 我的问题:是否有任何块类型,可以帮助选择加载块来发布URL而不是我的手工制作周期?例如,它会使用.InputCount< = 2。

将URL发布到第一个加载时钟

还有一个。在数据流执行期间,代理服务器可能不可用。我想如果我放置一个BufferBlock而不是URL List,那么如果有这样的能力,我将能够动态地将LoadBlocks与来自此BufferBlock的死代理链接。那么有没有办法动态地从网络中取消链接?

Dataflow network scheme

1 个答案:

答案 0 :(得分:4)

  

是否有任何块类型,可以帮助选择加载块来发布URL到我的手工制作周期?例如,它会使用.InputCount< = 2。

将URL发布到第一个加载时钟

您可以做的是拥有一个链接到所有加载块的BufferBlock。然后,您可以将加载块的BoundedCapacity设置为类似3(在输入和输出队列中处理1个项目+ 2)。通过此设置,项目将在BufferBlock中等待,直到其中一个加载块中的空间可用。

  

有没有办法从网络中动态取消链接?

是的,LinkTo()会返回IDisposable,可用于销毁该链接(通过调用Dispose())。