我无法停止任务。首先,我刚开始使用Tasks。以前,我一直使用 delegate.BeginInvoke() 在后台运行,但这次我需要停止后台执行,如果需要的话。所以我切换到任务。这是我的代码:
CancellationTokenSource token = new CancellationTokenSource();
Task posting = Task.Factory.StartNew(() => DoPosting(docs, session), token.Token);
HttpRuntime.Cache[session.ToString() + "_token"] = token;
HttpRuntime.Cache[session.ToString() + "_task"] = posting;
这是 ASP.NET MVC,所以我将持久的东西存储在 HttpRuntime.Cache 中。用户可以通过此操作取消操作:
public JsonResult StopPosting(string session)
{
CancellationTokenSource token = (CancellationTokenSource)HttpRuntime.Cache.Get(session.ToString() + "_token");
Task posting = (Task)HttpRuntime.Cache[session.ToString() + "_task"];
token.Cancel();
return Json(new { Message = "Stopped!" });
}
现在,当这个动作第一次被击中时,什么也没有发生。然后我第二次要求取消。现在,token.IsCancellationRequested 说“真”,所以 token.Cancel() 一定做了什么。但是posting.Status 仍然是“正在运行”。它会一直保持这种状态,直到它完成,然后它是“RunToCompletion”。
所以,我要求取消一个任务,但它没有被取消。
也许我做错了什么或者我遗漏了一些明显的东西,但我只是看不到/理解为什么它不会取消。
也许有人可以解释一下?
问候。