我正在玩ASP.net MVC中的异步控制器,只是为了看看它们是如何工作的。在我的一个异步操作方法中,我想通过循环几次并执行Thread.Sleep来模拟一个长时间运行的方法:
for(int x = 1; x <= 10; x++) {
Thread.Sleep(1000);
Session["progress"] = x * 10;
}
我想要一种快速而又脏的方式来报告长时间运行的进度,所以我只使用了会话状态。我不会在正常的应用程序中使用它,但我注意到在另一个非异步操作方法中,此会话状态未被持久化:
public ActionResult ReportProgress() {
int progress = 0;
if( Session["progress"] != null ) {
progress = (int)Session["progress"];
}
return Json(progress);
}
在ReportProgress方法中,此会话变量始终为null。当我调试其他异步方法时,Session正在持久化。
有没有人知道为什么异步方法和同步方法似乎没有相同的会话?