c#重置取消令牌

时间:2016-01-19 16:43:55

标签: c# task-parallel-library task cancellation

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

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

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

2 个答案:

答案 0 :(得分:4)

您无法将取消状态中的CancellationToken设置回未取消状态。

同样,您创建的Task工作结束了;一旦令牌被取消,它不只是坐在那里等待。 while循环将结束,因为没有更多代码,任务将完成。

如果您想在取消工作后重新开始工作启动新工作创建新的取消令牌

答案 1 :(得分:1)

你需要制作一个新的CancellationTokenSource - 一旦你设置它就无法重置它。

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