【问题标题】:Dataflow TransformManyBlock throttling数据流 TransformManyBlock 节流
【发布时间】:2017-02-02 21:16:24
【问题描述】:
如何在 Dataflow 网格中限制 TransformManyBlock?
我指定了一个 BoundedCapacity,但它看起来只影响输入队列。
所以我的块不断处理输入和输出队列不断增长。
以下块还指定了BoundedCapacity,然后我的所有项目都堆积在TransformManyBlock 的输出队列中,吃掉我所有的RAM。
【问题讨论】:
标签:
c#
multithreading
throttling
tpl-dataflow
dataflow
【解决方案1】:
是的,你是对的,并且没有内置的机会来限制输出队列。这样做的方式是检查输出队列是否已满。
您应该检查的一件事是您用于添加消息的方法。如果是Post,则会在消息发布前阻塞线程。但是如果你使用SendAsync,你应该await它,否则你的RAM会被await状态机器和正在发布的消息淹没。
但是,您至少可以做两件事:
- 创建具有此类属性的自定义块。这可能具有挑战性,我不建议这样做。
- 为此目的在您的链中引入
BufferBlock - this is default way 以在数据流中添加一些限制。在这种情况下,如果没有位置,消息将不会在您的数据流上继续进行。如果您在彼此之间链接块,则此解决方案将起作用。