首页 > 解决方案 > 如何创建分层 CancellationTokenSource?

问题描述

在我们的项目中,我们决定借助CancellationToken.

由于项目中作品的结构,我需要一个分层的取消机制。通过分层,我的意思是父源取消会导致所有子源被递归取消,但子源取消不会传播到父源。

.NET 中是否有现成可用的选项?如果不是,我不确定向父代币注册代表是否足够,或者应该给予进一步考虑。

标签: c#tasktask-parallel-librarycancellation

解决方案


是的,此功能开箱即用。查看CancellationTokenSource.CreateLinkedTokenSource方法。

当任何源令牌处于取消状态时,创建一个CancellationTokenSource将处于取消状态的。

例子:

using var parentCts = new CancellationTokenSource();
using var childrenCts = CancellationTokenSource
    .CreateLinkedTokenSource(parentCts.Token);

parentCts.Cancel(); // Cancel the children too
childrenCts.Cancel(); // Doesn't affect the parent

推荐阅读