我有一个简单的有界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);
}
队列链接到一个完成其工作的变压器,但它并不相关。
我需要以某种方式等待直到队列未满。
答案 0 :(得分:3)
你说:
"队列链接到完成其工作的变压器,但它并不相关。"
如果通过"变压器"你的意思是TransformBlock
(我假设你这样做)可能发生的事情是你将BufferBlock
链接到BufferBlock
但只限制BoundedCapacity
的大小{{1} }}
由于TransformBlock
无限制(默认),您发布到BufferBlock
的所有内容都会立即转移到TransformBlock
' InputQueue
#39;为什么你的记忆增加。
在管道中仅绑定一个块并不会限制整个管道。您需要单独绑定每个块。