我对缓存块(Bufferblock)和数据流处理有一些问题。假设我设置了以下这样的东西(我从另一个问题复制了这段代码,但它可以说明问题):
var forwarder = new BufferBlock<SomeType>();
forwarder.LinkTo(target1, item => matchesTarget1(item));
forwarder.LinkTo(target2, item => matchesTarget2(item));
forwarder.LinkTo(DataflowBlock.NullTarget<SomeType>());
问题1:假设没有并发设置,如果我向前置器添加1000个与目标1匹配的项目,它们是否都会立即发布到目标1?也就是说,排队是否在目标1内进行,因此转发器(缓冲块)现在为空?我相信是这样,这意味着缓冲区立即清空自己?还是当目标1决定无法处理更多内容时,目标1会拒绝接收内容?
问题2:假设我将Target1的maxdegreeofparallelism设置为4,则我认为这意味着事情会停留在缓冲区中,直到目标能够处理它们。但这是否意味着,如果我的队列看起来像这样:
target1Item
target1Item
target1Item
target1Item
target1Item
target2Item
target2Item
target2Item
那么直到所有5个target1Items被接受之前,target2将不会有任何工作可做。如果target1是一个缓慢的过程,那么这意味着当它可以派上用场时,target2可能会闲置。
我已经反复阅读了相关资料,但仍然找不到明确的答案。任何帮助将不胜感激。谢谢!