【问题标题】: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状态机器和正在发布的消息淹没。

但是,您至少可以做两件事:

  1. 创建具有此类属性的自定义块。这可能具有挑战性,我不建议这样做。
  2. 为此目的在您的链中引入BufferBlock - this is default way 以在数据流中添加一些限制。在这种情况下,如果没有位置,消息将不会在您的数据流上继续进行。如果您在彼此之间链接块,则此解决方案将起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-21
    • 2019-08-18
    • 2019-12-12
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    相关资源
    最近更新 更多