Асинхронный вызов в приложении ASP.NET - PullRequest
1 голос
/ 04 мая 2011

Я не говорю об асинхронных страницах или асинхронных обработчиках, я просто хочу знать, стоит ли бояться каких-либо побочных эффектов, когда я вызываю асинхронный метод, который заканчивается после завершения рендеринга страницы.

Пример: каждый раз, когда пользователь входит в систему, мне приходится запускать тяжелую и трудоемкую операцию SQL, но пользователю не нужно знать результат этой операции, поэтому я могу выполнить запрос, используя BeginExecuteNonQuery безпропустите любой обратный вызов и завершите рендеринг страницы.

Меня беспокоит, что произойдет, если HTTP-вызов завершится (потому что страница обслуживается) и все, что я выполнил асинхронно, уже запущено?ASP.NET или IIS собираются что-то вырезать, уничтожить, аннулировать?

Приветствия.

Ответы [ 2 ]

3 голосов
/ 04 мая 2011

Эта операция будет выполняться даже после завершения запроса. Однако обратите внимание, что хост ASP.NET агрессивно уничтожает потоки Если у IIS есть какая-либо причина для выгрузки или переработки AppDomain, ваш фоновый поток будет уничтожен. Разгрузка происходит в нескольких ситуациях. Например, когда в течение определенного периода времени не поступало новых запросов. Или когда из приложения выдается слишком много исключений в течение определенного периода времени. Или когда давление памяти становится слишком высоким.

Если вам нужна гарантия, что операция завершится, я думаю, что вы можете сделать три вещи:

  1. Ускорьте операцию, чтобы она могла работать синхронно, или
  2. Переместите эту тяжелую операцию в службу Windows и разрешите ее выполнить, или
  3. Вы можете подключиться к методу HostingEnvironment.RegisterObject (как объясняет Фил Хаак здесь ) (требует полного доверия), чтобы предотвратить отключение AppDomain во время работы этого потока.
0 голосов
/ 04 мая 2011

Если вы зарегистрировали обратный вызов, процесс вернется, чтобы уведомить обратный вызов, в противном случае он все равно выполнит задание.AFAIK - ни ASP.NET, ни IIS ничего не будут вырезать / уничтожать или аннулировать, поскольку выполнение уже было заказано, и оно должно завершиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...