暂停发布到完整的BufferAction

时间:2015-10-07 10:16:15

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

我有一个简单的有界BufferBlock,我发布和接收数据。 我推入的元素是来自db的行。要保存一些内存而不将所有行加载到BufferBlock,我使用BoundedCapacity

问题在于它的工作方式并不像我预期的那样有效,实际上它并没有按照预期的那样发布到BufferBlock,但它仍然会从数据库读取将它(可能)保存在内存中的某个位置,以便它可以在稍后的时间内将其推送到BufferBlock

while (reader.Read()) {
    // queue is the bounded BufferBlock
    // why does it keep reading even though queue is full?
    MyObj obj = GetMyObjByReader(reader);
    await queue.SendAsync(obj);
}

队列链接到一个完成其工作的变压器,但它并不相关。

我需要以某种方式等待直到队列未满。

1 个答案:

答案 0 :(得分:3)

你说:

  

"队列链接到完成其工作的变压器,但它并不相关。"

如果通过"变压器"你的意思是TransformBlock(我假设你这样做)可能发生的事情是你将BufferBlock链接到BufferBlock但只限制BoundedCapacity的大小{{1} }}

由于TransformBlock无限制(默认),您发布到BufferBlock的所有内容都会立即转移到TransformBlock' InputQueue #39;为什么你的记忆增加。

在管道中仅绑定一个块并不会限制整个管道。您需要单独绑定每个块。