[英]Good way for a CancellationToken to affect a subset of tasks controlled by another CancellationToken
有沒有一種方法可以將取消令牌與另一個取消令牌控制的任務子集聯系起來?...在此示例中,我創建了兩個cancelationTokenSource,並在另一個的Cancel函數中注冊了一個...取消圖像加載...僅取消這些任務...但是如果我取消所有...則取消所有任務...還有更好的方法嗎? (這種方式看起來很雜亂……例如何時注銷)
CancellationTokenSource CancelAllSource = new CancellationTokenSource();
for (int i = 0; i < 20; i++)
Task.Factory.StartNew(() => { LoadUrl(i, CancelAllSource.Token); });
CancellationTokenSource CancelImageLoadsSource = new CancellationTokenSource();
// this would connect the cancel all token to the cancel image loads token
CancelAllSource.Token.Register(CancelImageLoadsSource.Cancel, false);
for (int i = 0; i < 10; i++)
Task.Factory.StartNew(() => { LoadImage(i, CancelImageLoadsSource.Token); });
...
CancelImageLoadsSource.Cancel(); // would cancel only the LoadImage tasks
// or
CancelAllSource.Cancel(); // would cancel all tasks (including the LoadImage tasks)
就在這里。
您可以使用CreateLinkedTokenSource
*,它創建了一個CancellationTokenSource
您可以自己取消,但也可以在發出令牌信號時自動取消:
var cancelAllSource = new CancellationTokenSource();
var cancelImageLoadsSource = CancellationTokenSource.CreateLinkedTokenSource(cancelAllSource.Token);
創建一個CancellationTokenSource,當指定數組中的任何源標記處於取消狀態時,該狀態將處於取消狀態。
來自CancellationTokenSource.CreateLinkedTokenSource
*如果您看一下實現,那是不一樣的,但是非常接近使用CancellationToken.Register
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.