c# 重置取消令牌

c# Reset Cancellation token

我有一些代码想要 运行,直到我请求取消。

              Task.Run(() =>
                {
                    while (!token.IsCancellationRequested)
                    {
                        GetFeedbackTask();
                    }
                }, token);

然后我执行这个方法token.Cancel()。这将按预期取消任务,并按预期取消我的 while 循环。问题是当我在取消 token.IsCancellationRequested 后再次尝试 运行 任务时 属性 仍然是 true。是什么将 属性 设置回 false?我需要 Dispose 令牌吗?

您永远无法将 CancellationToken 从已取消状态设置回 non-cancelled 状态。

同样,您创建的用于工作的 Task 也将结束;一旦令牌被取消,它就不会坐在那里等待。 while循环将结束,由于没有更多代码,任务将完成。

如果您想 re-start 取消工作后 启动一个新工作人员 创建一个新的取消令牌 .

您需要创建一个新的 CancellationTokenSource - 一旦设置就无法重置。

token.Dispose(); // Clean up old token source....
token= new CancellationTokenSource(); // "Reset" the cancellation token source...
Task.Run(() =>
{
    while (!token.IsCancellationRequested)
    {
        GetFeedbackTask();
    }
}, token);