簡體   English   中英

等待ActionBlock <T> - TPL DataFlow

[英]Awaiting ActionBlock<T> - TPL DataFlow

我正在使用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

ActionBlock<T>公開Completion屬性。 這是一個Task ,當塊完成所有處理后完成。 所以你可以等待:

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

我必須承認我自己沒有使用過TPL Dataflow,但是這些例子表明應該沒問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM