[英]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.