正在等待 ActionBlock - TPL DataFlow
本文关键字:TPL DataFlow 在等待 ActionBlock | 更新日期: 2023-09-27 18:30:32
我正在使用TPL DataFlow和ActionBlock来创建并行性。使用 TPL 数据流的原因是因为它支持异步性,除了我无法让它工作。
var ab = new ActionBlock<Group>(async group =>
{
try {
labelStatus.Text = "Getting admins from " + group.Gid;
await GetAdminsFromGroup(group.Gid);
}catch (ArgumentOutOfRangeException ex) {
// Log exception
}
}, new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 10 });
db.Groups.ToList().ForEach(i => ab.Post(i));
ab.Complete();
MessageBox.Show("Complete");
消息框几乎立即显示,尽管操作块仍在运行。在操作块完成之前如何await
?
ActionBlock<T>
公开Completion
属性。这是一个Task
,当块完成所有处理时完成。所以你可以等待:
ab.Complete();
await ab.Completion;
MessageBox.Show("Complete");
我必须承认我自己没有使用过TPL数据流,但这些例子表明应该没问题。