gpt4 book ai didi

tpl-dataflow - 使用谓词时 TPL 数据流永远不会完成

转载 作者:行者123 更新时间:2023-12-02 09:15:39 30 4
gpt4 key购买 nike

我有以下 TPL 数据流,当使用谓词过滤从 TransformBlock 传递到 ActionBlock 的项目时,它永远不会完成。

如果谓词对任何项目返回 false,则数据流挂起。

请有人提供一些有关正在发生的事情以及如何解决此问题的见解吗?

// define blocks 
var getBlock = new TransformBlock<int, int>(i =>
{
Console.WriteLine($"getBlock: {i}");

return ++i;
});

var writeBlock = new ActionBlock<int>(i =>
{
Console.WriteLine($"writeBlock: {i}");
});

// link blocks
getBlock.LinkTo(writeBlock, new DataflowLinkOptions
{
PropagateCompletion = true
}, i => i == 12); // <-- this predicate prevents the completion of writeBlock

// push to block
var items = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
foreach (var i in items)
{
getBlock.Post(i);
}

// wait for all operations to complete
getBlock.Complete();
await writeBlock.Completion; // <-- application hangs here

最佳答案

getBlock没有完成,因为发布到它的项目无处可去。如果您有谓词,请添加一个空目标,以便任何不匹配的项目都有一个地方可以退出管道。

getBlock.LinkTo(writeBlock, new DataflowLinkOptions
{
PropagateCompletion = true
}, i => i == 12)
getBlock.LinkTo(DataflowBlock.NullTarget<int>());

关于tpl-dataflow - 使用谓词时 TPL 数据流永远不会完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47455192/

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