我对Bufferblock和Dataflow处理中的一些问题
一般。假设我进行了如下设置(
从另一个问题中复制了此代码,但这只是为了说明)

var forwarder = new BufferBlock<SomeType>();
forwarder.LinkTo(target1, item => matchesTarget1(item));
forwarder.LinkTo(target2, item => matchesTarget2(item));
forwarder.LinkTo(DataflowBlock.NullTarget<SomeType>());


Q1。假设没有并发设置,如果我添加匹配的1000个项目
目标1到转发器,它们是否都立即发布到目标1?
即排队是否发生在target1内,因此转发器(BufferBlock)现在为空?我相信是的,这意味着缓冲区会立即清空吗?还是当target1决定无法再应付时才拒绝呢?

Q2。假设我将target1的maxdegreeofparallelism设置为4,
相信这将意味着事物将一直保留在缓冲区中,直到
目标有能力处理它们。但这是否意味着,如果我的
队列看起来像这样,例如:

target1物品

target1物品

target1物品

target1物品

target1物品

target2Item

target2Item

target2Item

然后,直到全部5个目标2都不会被提供
target1Items已被接受。如果target1是一个缓慢的过程,那
意味着target2可能会无所事事
使自己有用。

我已经阅读并阅读过有关此内容的信息,但找不到任何内容
可以肯定地回答这个问题。任何帮助将不胜感激。
谢谢

最佳答案

a1。这取决于目标块的边界容量。默认值为-1(无界),因此,是的,缓冲区将清空自身并将所有项目移动到target1。如果已设置容量,并且已达到容量,则其余项目将留在缓冲区中。

a2。 AFAIK如果我们假设目标的容量不受限制,那么所有项目将从缓冲区移至target1和target2。在target1上设置maxdegreeofparallelism仅允许并行处理多个项目。

关于c# - BufferBlock和TPL数据流行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21646487/

10-09 04:59