Bil*_*ani 4 c# multithreading asynchronous task-parallel-library tpl-dataflow
我的问题的标题说明了一切。
我正在寻找不需要输入的 TPL 数据流块。
现在我正在使用转换块,但它的输入未使用。
我会从 a 构建一个这样的块BufferBlock<T>:该方法接受一个代表ITargetBlock<T>块的ISourceBlock<T>一侧并返回它的一侧的委托。这样,委托就可以向块发送输入,但从外部看,它看起来像一个只产生输出的块。
编码:
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;
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
var producer = CreateProducerBlock<int>(async target =>
{
await target.SendAsync(10);
await target.SendAsync(20);
});
ITargetBlock<int> consumer = …;
producer.LinkTo(consumer);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1114 次 |
| 最近记录: |