1
我想通過異步控制器執行導入過程,其中我聲明瞭一個任務,以便所有方法都可以訪問它,但是當任務過程完成時它將變爲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);
}
}
}
我怎樣才能做到這一點?
UPDATE 我試過用Hangfire來做到這一點,但這是不可能的。我的導入方法應該返回一個錯誤列表,而使用Hangfire則無法訪問運行的返回。
爲什麼這些方法要訪問*任務*而不是結果?並不是他們*可以*。每個請求導致不同的控制器實例。如果你想創造一個長時間運行的工作,那不是做這件事的方法。 –
檢查Scott Hanselman的[如何在ASP.NET中運行後臺任務](http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx)。它解釋了爲什麼你要求不起作用,如何用QueueBackgroundWorkItem正確啓動後臺任務,以及如何使用Hangfire實現預定作業 –