すべてのメソッドがアクセスできるようにタスクを宣言したAsyncコントローラでインポートプロセスを実行しようとしていますが、タスクプロセスが終了するとnullになります私は別の方法からの情報を見ることができません。複数のメソッド(アクション)から同じタスクにアクセス
[SessionState(SessionStateBehavior.Disabled)]
public class ImportController : AsyncController
{
private Task<ResultObject> _myTask;
public ActionResult Import()
{
_myTask = Task.Run(() => {
//failed or Success
return new ResultObject();
});
_myTask.Wait();
return Json(new { success : _myTask.Result });
}
public ActionResult CheckImportProcess()
{
//here _myTask is Null
if(_myTask.Status == TaskStatus.Running){
return Content("IS RUNNIN");
}
else{
return Content(_myTask.Result);
}
}
}
私はこれをどのように行うことができますか?
更新 これを行うにはハングファイアを使用しようとしましたが、できませんでした。私のインポートメソッドはエラーのリストを返し、Hangfireでは実行の戻り値にアクセスすることはできません。
なぜメソッドは結果の代わりに*タスク*にアクセスする必要がありますか?彼らは*できる*ではありません。各リクエストは、異なるコントローラインスタンスになります。長時間実行しているジョブを作成したい場合は、それを行う方法ではありません。 –
Scott Hanselmanの[ASP.NETでのバックグラウンドタスクの実行方法](http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx)を参照してください。なぜあなたが聞いたことがうまくいかないのか、QueueBackgroundWorkItemを使ってバックグラウンドタスクを正しく開始する方法、そしてスケジュールされたジョブを実装する方法を説明します。例えば、Hangfire –