2012-10-09 4 views
0

Мне нужно выполнить метод в асинхронном режиме. Я попытался создать делегат, но сеанс уничтожается после завершения запроса. Эта функция должна продолжать работать после этого и иметь возможность использовать System.Web.HttpContext.Current.Session.Как использовать делегат async в запросе ASP.NET MVC 2?

Есть ли обходной путь, позволяющий асинхронному методу продолжать выполнение после завершения запроса?

Спасибо.

ответ

0

Вы можете использовать делегат (например, с ThreadPool.QueueUserWorkItem), но вам нужно, чтобы захватить ссылку на HttpSessionStateBase снаружи делегата:

HttpSessionStateBase session = Session; 

ThreadPool.QueueUserWorkItem(delegate 
{ 
    // You can access session variable here 
    ... 
}); 

сессия не будет уничтожен, пока вы держите ссылку. Здесь есть простой пример: Reporting server side operation progress with jQuery UI Progressbar.

+0

В методе, используемом делегатом, я вызываю другой метод, который использует System.Web.HttpContext.Current.Session. Я не могу использовать этот пример. – Emanuel

+0

@Emanuel Это не сработает, потому что на данный момент нет текущего HttpContext. Вам нужно получить то, что вам нужно, перед делегатом, и передать его как параметры любым методам и т. Д. (Он будет правильно сериализован/десериализован позже, но вам нужно запомнить об использовании HttpSessionStateBase.SyncRoot для синхронизации параллельного доступа). – tpeczek

Смежные вопросы