gpt4 book ai didi

c# - 是否有不接受输入但返回输出的 TPL 数据流 block ?

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

我的问题的标题说明了一切。

我正在寻找不需要输入的 TPL 数据流 block 。

现在我正在使用一个变换 block ,但它的输入未被使用。

最佳答案

我会从 BufferBlock<T> 构建一个像这样的 block : 该方法接受一个呈现 ITargetBlock<T> 的委托(delegate) block 的一侧并返回 ISourceBlock<T>它的一侧。这样,委托(delegate)可以向 block 发送输入,但从外部看,它就像一个只产生输出的 block 。

代码:

public static ISourceBlock<T> CreateProducerBlock<T>(
Func<ITargetBlock<T>, Task> producer,
int boundedCapacity = DataflowBlockOptions.Unbounded)
{
var block = new BufferBlock<T>(
new ExecutionDataflowBlockOptions { BoundedCapacity = boundedCapacity });

Task.Run(async () =>
{
try
{
await producer(block);

block.Complete();
}
catch (Exception ex)
{
((IDataflowBlock)block).Fault(ex);
}
});

return block;
}

示例用法:

var producer = CreateProducerBlock<int>(async target =>
{
await target.SendAsync(10);
await target.SendAsync(20);
});

ITargetBlock<int> consumer = …;

producer.LinkTo(consumer);

关于c# - 是否有不接受输入但返回输出的 TPL 数据流 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38198889/

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