正在等待 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> - TPL DataFlow

ActionBlock<T>公开Completion属性。这是一个Task,当块完成所有处理时完成。所以你可以等待:

ab.Complete();
await ab.Completion;
MessageBox.Show("Complete");

必须承认我自己没有使用过TPL数据流,但这些例子表明应该没问题。