我是 TPL Dataflow 的新手,它可以工作,但我不确定我是否正确使用它。我有一个输入(字符串)列表,我想以最大并行度处理它们(全部),并知道何时全部完成。现在我只是foreach通过输入并调用Post,ActionBlock忽略返回值。这似乎不正确,因为它可能会丢失输入。
我的问题是:如何避免丢失物品?是否有一个内置块,我可以只向其中提供我的输入,并且它将确保它们都被尝试?(无论每次输入成功/失败。)
我看到的建议基本上是:
await block.Completion;
这是否说明了失败的输入(其中Post或SendAsync将返回 false)?对我来说奇怪的是,这个决定似乎是在我打电话时而Post不是之后做出的,所以这Completion甚至不包括这些项目。
我觉得我基本上需要一个重试循环来处理上次无法处理的输入,类似于:
while (items.Count > 0) {
foreach (var item in items) {
if (await block.SendAsync(item)) {
items.Remove(item);
}
}
await block.Completion;
}
block.Complete();
(除非有更好的循环处理/错误检查。)
这个额外的级别是不必要的吗?或者我在概念上哪里错了?
慕标琳琳
翻过高山走不出你
相关分类