暂停发布到完整的 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 TransformBlockBufferBlock但仅使用 BoundedCapacity.

限制 BufferBlock 的大小

由于 TransformBlock 是无界的(这是默认设置),您 post 到 BufferBlock 的所有内容都会立即转移到 TransformBlockInputQueue 这就是你记忆力增加的原因。

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