簡體   English   中英

TPL 數據流:取消

[英]TPL Dataflow: Cancellations

在 .Net 庫中的一長串IDataflowBlock中,如果我想將整個塊集合的執行限制為一個 TimeSpan(比如 5 秒),如果我在最后一個塊的傳遞一個CancellationToken就足夠了構造函數(當然通過DataflowBlockOptions )?

我認為這個問題是獨立的,但對於一些上下文,一個例子:

var token = new CancellationToken(5000);
var options = new DataflowBlockOptions{ CancellationToken = token };

// DataflowBlockOptions not used although possible through overloading
var block1 = new Bufferblock<int>(/*options*/);

// DataflowBlockOptions not used although possible through overloading
var block2 = new TransformBlock<int,int>(i => i + 1/*, options*/);

// Options used here to limit total time to 5 seconds.
var block3 = new ActionBlock<int>(i => Console.WriteLine(i), options);

block1.LinkTo(block2);
block2.LinkTo(block3);

block1.Post(...)

await block3.Completion;

提出問題的另一種方式是:在上面的片段中取消注釋/* options */是否有任何好處。

如果您希望所有 Dataflow 塊出錯,那么您應該將CancellationToken作為選項傳遞給每個塊。 或者,您可以將其作為選項傳遞給第一個,並在LinkTo傳播您的完成。 我通常不會取消我的網格,但這是我通常關閉管道樣式網格的首選方法:鏈接完成,然后完成第一個。

如果你不這樣做,那么你最終會得到兩個連接到一個完整塊的活動塊,所以添加到網格中的任何項目都將流過並最終進入輸出緩沖區。

暫無
暫無

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

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