“BatchBlock”在非贪婪模式下无法正常工作

问题描述 投票:0回答:1

当我使用贪婪模式时,一切都按预期进行。但是当我启用非贪婪模式时,会抛出以下异常:

未处理的异常。 System.InvalidOperationException:源已完成但未提供要接收的数据。 在System.Threading.Tasks.Dataflow.Internal.Common.InitializeStackTrace(异常异常) --- 先前位置的堆栈跟踪结束 --- 在 System.Threading.Tasks.Dataflow.DataflowBlock.Receive[TOutput](ISourceBlock`1 源,TimeSpan 超时,CancellationToken CancellationToken)

BatchBlock<int> foo = new(1, new()
{
    //Greedy = false
});

foo.Post(1);

Console.WriteLine(foo.Receive());

我做错了什么?

.NET版本:8.0.303, Windows 11

c# .net concurrency tpl-dataflow
1个回答
0
投票

以防它将来对某人有帮助(我必须额外使用“BufferBlock”)

BufferBlock<int> buffer = new();
buffer.Post(1);

BatchBlock<int> foo = new(1, new()
{
    Greedy = false
});

buffer.LinkTo(foo);

Console.WriteLine(foo.Receive());
© www.soinside.com 2019 - 2024. All rights reserved.