gpt4 book ai didi

c# - BufferBlock 和 TPL 数据流行为

转载 作者:行者123 更新时间:2023-11-30 22:09:21 24 4
gpt4 key购买 nike

我有一些关于 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 个匹配项target1给forwarder,是不是都即时发到target1?即排队是否发生在 target1 内,因此转发器 (BufferBlock) 现在是空的?我相信是的,这意味着缓冲区会立即清空吗?或者当 target1 决定无法再处理时,它是否会拒绝?

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

目标1项

目标1项

目标1项

目标1项

目标1项

目标2项

目标2项

目标2项

然后 target2 将不会被提供任何事情直到全部 5target1Items 已被接受。如果 target1 是一个缓慢的过程,那么意味着 target2 可能会无所事事让自己变得有用。

我已经阅读和阅读了这方面的内容,但我找不到任何内容明确回答这个问题。任何帮助将不胜感激。谢谢

最佳答案

a1.这取决于目标 block 的有界容量。默认值为 -1(无界),所以是的,缓冲区将清空自身并将所有项目移动到 target1。如果它有一个容量集,并且达到了它,那么其余的项目就会留在缓冲区中。

a2. AFAIK 如果我们假设目标的容量是无限的,那么所有项目都会从缓冲区移动到 target1 和 target2。在 target1 上设置 maxdegreeofparallelism 只允许并行处理多个项目。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com