c# - 获取任务取消 token

标签 c# .net multithreading cancellation-token

我可以获取在任务操作执行期间传递给 Task 构造函数的 CancellationToken 吗?大多数示例如下所示:

CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken token = cts.Token;

Task myTask = Task.Factory.StartNew(() =>
{
    for (...)
    {
        token.ThrowIfCancellationRequested();

        // Body of for loop.
    }
}, token);

但是,如果我的操作不是 lambda,而是放在其他类中的方法,并且我无法直接访问 token 怎么办?唯一的方法是将 token 作为状态传递吗?

最佳答案

But what if my action is not lambda but a method placed in other class and I don't have direct access to token? Is the only way is to pass token as state?

是的,在那种情况下,您需要传递作为状态装箱的 token ,或包含在您用作状态的其他类型中。

但是,仅当您计划在方法中使用 CancellationToken 时才需要这样做。例如,如果您需要调用 token.ThrowIfCancellationRequested()

如果您只是使用 token 来阻止方法被安排,那么它不是必需的。

关于c# - 获取任务取消 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15439245/

相关文章:

c# - 我可以通过 C# 中的堆栈跟踪获取方法局部变量吗?

c# - SDL Tridion 事件订阅取消订阅问题

c - 在 sqlite3 中使用多线程时的性能问题

c# - 将数据库恢复到服务器时出错 : . NET Core 不应使用文件支持的模型

c# - 在 C# 应用程序中使用 MsgPack 自定义序列化程序

c# - 为什么 DwmGetWindowAttribute 与 DWMWA_EXTENDED_FRAME_BOUNDS 在切换监视器时表现异常?

c# - RDLC- 本地报告处理期间发生错误。报告定义无效

c# - .Net中的堆数据结构

java并发实践14.6

C++多线程互斥锁 "reset"