キャンセル トークンを別のキャンセル トークンによって制御されるタスクのサブセットに関連付ける方法はありますか?...この例では、2 つの cancelTokenSource を作成し、1 つを他の 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)