暂停发布到完整的 BufferAction
Suspend posting to full BufferAction
我有一个简单的有界 BufferBlock
,我 post 从中接收数据。
我推入的元素是来自数据库的行。为了节省一些内存而不是将所有行加载到 BufferBlock
中,我使用 BoundedCapacity
.
问题是它不像我预期的那样工作,实际上它不会 post 它到 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);
}
队列链接到一个转换器,它完成他的工作,但它不是那么相关。
我需要以某种方式等待直到队列未满。
你说:
"The queue is linked to a transformer which does his job, but it's not that relevant."
如果 "transformer" 你的意思是 TransformBlock
(我假设你这样做)可能发生的是你 link TransformBlock
到 BufferBlock
但仅使用 BoundedCapacity
.
限制 BufferBlock
的大小
由于 TransformBlock
是无界的(这是默认设置),您 post 到 BufferBlock
的所有内容都会立即转移到 TransformBlock
的 InputQueue
这就是你记忆力增加的原因。
在管道中仅限制单个方块不会限制整个管道。您需要单独绑定每个块。
我有一个简单的有界 BufferBlock
,我 post 从中接收数据。
我推入的元素是来自数据库的行。为了节省一些内存而不是将所有行加载到 BufferBlock
中,我使用 BoundedCapacity
.
问题是它不像我预期的那样工作,实际上它不会 post 它到 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);
}
队列链接到一个转换器,它完成他的工作,但它不是那么相关。
我需要以某种方式等待直到队列未满。
你说:
"The queue is linked to a transformer which does his job, but it's not that relevant."
如果 "transformer" 你的意思是 TransformBlock
(我假设你这样做)可能发生的是你 link TransformBlock
到 BufferBlock
但仅使用 BoundedCapacity
.
BufferBlock
的大小
由于 TransformBlock
是无界的(这是默认设置),您 post 到 BufferBlock
的所有内容都会立即转移到 TransformBlock
的 InputQueue
这就是你记忆力增加的原因。
在管道中仅限制单个方块不会限制整个管道。您需要单独绑定每个块。