【问题标题】:Awaiting ActionBlock<T> - TPL DataFlow等待 ActionBlock<T> - TPL 数据流
【发布时间】:2013-09-08 16:38:10
【问题描述】:

我正在使用 TPL DataFlow 和 ActionBlock 来创建并行性。使用 TPL DataFlow 的原因是因为它支持异步,但我无法让它工作。

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");

消息框几乎立即显示,尽管 ActionBlocks 仍在运行。在 ActionBlock 完成之前我如何await

【问题讨论】:

    标签: c# task-parallel-library tpl-dataflow


    【解决方案1】:

    ActionBlock&lt;T&gt; 公开了一个 Completion 属性。这是一个Task,它在块完成处理所有内容时完成。所以你可以等待:

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

    我必须承认我自己没有使用过 TPL Dataflow,但示例表明应该没问题。

    【讨论】:

    • 优秀的乔恩,成功了。我刚刚在第 9 频道观看了一个视频,其中也提到了 Completion 属性。对于任何感兴趣的人,都在这里:channel9.msdn.com/posts/TPL-Dataflow-Tour ...顺便说一句,我是一个忠实的粉丝,很高兴你回答我的问题 :)
    猜你喜欢
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    相关资源
    最近更新 更多