#asp.net-mvc #asynchronous #task
#asp.net-mvc #асинхронный #задача
Вопрос:
Я разрабатываю веб-приложение на основе ASP.NET MVC.
Имеется большая база данных. Пользователи могут выполнять поиск в этой базе данных, используя пользовательские фильтры (html-форма с опциями). После того, как пользователи отправят форму и дождутся результата. Это очень медленная операция. Но это не вопрос оптимизации базы данных или запросов.
Итак, происходит медленная работа. Я хочу запускать эту операцию и время от времени получать ее состояние без реального преобразования страницы.
Я вижу это как:
- Отправка первого ajax-запроса (данных формы) для запуска этой медленной операции.
- Время от времени отправка ajax-запросов для получения информации об операции.
Вопросы: 1. Как я могу запустить операцию на сервере, которая будет обрабатываться вне http-запроса? 2. Как я могу получить состояние этой операции?
Ответ №1:
Как я могу запустить операцию на сервере, которая будет обрабатываться вне http-запроса
Вы могли бы запустить ее в фоновом потоке. Либо создайте ее вручную, либо, если вы используете .NET 4.0, используйте TPL.
Как я могу получить состояние этой операции?
После запуска операции должен быть присвоен уникальный идентификатор и она должна быть немедленно возвращена клиенту. Затем, когда операция выполняется в фоновом потоке, она может обновлять свой ход, используя идентификатор. Например, вы могли бы использовать состояние приложения для сохранения этого прогресса. Клиент будет регулярно опрашивать сервер, чтобы получить информацию о ходе выполнения.