タスクを停止できません。まず、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!" });
}
これで、このアクションが初めてヒットしたとき、何も起こりません。その後、2度目のキャンセル申請。今、token.IsCancellationRequested は「true」と言っているので、token.Cancel() は何かをしたに違いありません。しかし、posting.Status はまだ「実行中」です。完了するまでそのままで、その後「RunToCompletion」になります。
というわけで、Taskのキャンセルを申請したのですが、キャンセルされませんでした。
たぶん、私は何か間違ったことをしている、または明らかな何かを見逃していますが、なぜそれがキャンセルされないのかわかりません/理解できません。
多分誰かが光を当てることができますか?
よろしく。