数据流TransformManyBlock限制

时间:2016-09-25 13:36:45

标签: c# multithreading throttling tpl-dataflow dataflow

如何限制数据流网格中的TransformManyBlock

我指定了一个BoundedCapacity,但它看起来只会影响输入队列 所以我的块继续处理输入和输出队列不断增长。

以下块也指定了BoundedCapacity,然后我的所有项目都堆叠在TransformManyBlock的输出队列中,占用了我所有的RAM。

1 个答案:

答案 0 :(得分:0)

是的,你是对的,没有内置的机会来限制输出队列。这样做的方式就是要检查更多的开销,输出队列是否已满。

您应该检查的一件事是您用于添加邮件的方法。如果是Post,它将在发布消息之前阻止该线程。但是,如果您正在使用SendAsync,则应该await它,在其他情况下,您将使用await - 状态机和正在发布的消息填充您的RAM。

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

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