CancellationToken影响由另一个CancellationToken控制的任务子集的好方法

本文关键字:CancellationToken 子集 方法 任务 控制 影响 另一个 | 更新日期: 2023-09-27 18:23:56

是否有方法将取消令牌绑定到由另一个取消令牌控制的任务子集?。。。在这个例子中,我创建了两个cancellTokenSource。。。并针对另一个的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)

CancellationToken影响由另一个CancellationToken控制的任务子集的好方法

是的,有.

您可以使用创建CancellationTokenSourceCreateLinkedTokenSource*,您可以自己取消,但也会在令牌发出信号时自动取消:

var cancelAllSource = new CancellationTokenSource();
var cancelImageLoadsSource = CancellationTokenSource.CreateLinkedTokenSource(cancelAllSource.Token);

创建一个CancellationTokenSource,当指定数组中的任何源令牌处于取消状态时,该源令牌将处于取消状态。

来自CancellationTokenSource.CreateLinkedTokenSource


*如果你看一下实现,它是不一样的,但它非常接近于使用CancellationToken.Register,就像你在做

相关文章:
  • 没有找到相关文章