Divyay208 Ответов: 2

Как перенаправить на другую страницу в то время как текущее действие выполняется в MVC


У меня есть два пункта меню в моем приложении Mvc, я хочу позволить пользователю перемещаться по второму меню, когда он нажимает, пока выполняется текущее(первое) действие, первое действие является асинхронным действием, но все еще блокирует пользователя до тех пор, пока оно не будет завершено

Что я уже пробовал:

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

2 Ответов

Рейтинг:
0

MadMyche

Это не совсем то, как работает HTTP. Работает HTTP запрос и ответ. Хотя вы можете перейти от исходного URL-адреса, любые запросы, которые он сделал, скорее всего, будут отменены.

Самое лучшее, что я мог бы порекомендовать, - это иметь URL1 на сервере просто "оболочку", которая определяет задачу, а затем запускает ее. Как только Task.Run() запускается, вы можете вернуть правильный ответ (должно быть 200: принято).
Это должно почти сразу же удовлетворить ваш запрос AJAX, чтобы можно было действовать по второй ссылке

Ссылка:
c# - возврат до завершения асинхронной задачи - переполнение стека[^]


Рейтинг:
0

Afzaal Ahmad Zeeshan

Это репост вашего вопроса, Отображение визуального результата асинхронного процесса в действии MVC[^]. Содержание вашего комментария помогает понять вопрос.

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

Для выполнения этих действий можно использовать фоновые потоки. Потоки пула потоков ограничены, и у вас быстро закончатся потоки. Создание новых потоков является дорогостоящим и дорогостоящим, и может быть вообще не очень хорошим решением. Таким образом, если бы мне пришлось это сделать, я бы рассмотрел возможность использования какой-то обработки событий, например очереди сообщений, для управления и поддержания состояния определенных событий и операций. Каждая операция может иметь свое состояние, ход выполнения, и я могу использовать это для обновления пользователей.

Проверьте эти ссылки для практического обзора,
Как запустить фоновые задачи в ASP.NET - Скотт Хансельман[^]
c# - Как запустить длительный процесс асинхронно под asp.net-что? - переполнение стека[^]
Простая асинхронная обработка фоновых задач с диалогом выполнения (решение Silverlight)[^]