我有以下情况:
是否存在我可以使用的块(或其他解决方案),它将采用类型IEnumerable<T>
或类似的输入,并将该IEnumerable
的每个元素转发到期望接收的块{ {1}}?
我不想重新发明轮子,所以我想在进入API并尝试编写自定义块之前检查是否有一个简单的解决方案。此外,重要的是将错误和完成传播到管道的末尾。
感谢您的回答!
答案 0 :(得分:4)
无需自定义块。你正在寻找TransformManyBlock
。这是一个简单的演示:
public async Task TransformManyExample() {
var data = Enumerable.Range(0, 10).ToList();
var block1 = new TransformManyBlock<IEnumerable<int>, int>(x => x);
var block2 = new ActionBlock<int>(x => Console.WriteLine(x.ToString()));
block1.LinkTo(block2, new DataflowLinkOptions() { PropagateCompletion = true });
block1.Post(data);
block1.Complete();
await block2.Completion;
}