Я играл с асинхронными контроллерами в 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 эта переменная сеанса всегда равна нулю. Когда я отлаживаю другой асинхронный метод, сеанс сохраняется.
Кто-нибудь понимает, почему асинхронный метод и синхронный метод, по-видимому, не имеют одинаковый сеанс?