我有一些代码要运行,直到我请求取消。
Task.Run(() =>
{
while (!token.IsCancellationRequested)
{
GetFeedbackTask();
}
}, token);
然后我执行此方法token.Cancel()
。这会按预期取消任务,并按预期取消while循环。问题是当我取消token.IsCancellationRequested
属性仍为true
后我再次尝试运行任务时。是什么让酒店回归false
?我需要Dispose
令牌吗?
答案 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);