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