我在專案中運用了Task.Run方法,但在該方法內部需要設定一個快取資料,快取設定Key使用了獲取客戶端cookie來標識唯一用戶,但在異步方法中獲取時會未空參考物件。這個設定快取的方式是框架本身寫好的,它是個自定義SessionHepler幫助類,整個框架都有在用,比如登錄用戶資訊的快取等,如果我將其改掉代價太高,所以我使用了如下方式實作:
[HttpPost]
public ActionResult ImportData(HttpPostedFileBase ImportFile)
{
AjaxResult res = new AjaxResult();
//TODO 驗證檔案型別
var filePath = Path.GetTempFileName();
try
{
ImportFile.SaveAs(filePath);
}
catch (IOException ex)
{
return Error("磁盤空間不足,請通知技術人員!");
}
HttpContext ctx = System.Web.HttpContext.Current;
Task.Run(() =>
{
System.Web.HttpContext.Current = ctx;
try
{
_dev_DutyInfoBus.ImportBatch(filePath);
}
catch(Exception ex)
{
SessionHelper.Session["DutyInfoImportProgress"] = new AjaxResult()
{
Success = false,
Msg = ex.Message,
Data = -1
};
}
});
return Success();
}
public void ImportBatch(string importFilePath)
{
//初始化進度為1
SessionHelper.Session["DutyInfoImportProgress"] = new AjaxResult()
{
Success = true,
Msg = "操作成功",
Data = 1
};
.......
}
我在呼叫異步任務前將當前請求傳遞了進去,經過測驗確實能獲取到值,我想請教的是,我這么做好嗎?會不會有隱患?是否還有其他方式?
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/283533.html
標籤:ASP.NET
