Отмена длительных задач Asp.net

Я использую веб-формы ASP.NET. В PostBack я создаю задачу (задача выполняется очень долго). На странице html мне нужна кнопка, которая может отменить эту задачу. 1. Я нажимаю кнопку GetResults, которая запускает задачу на сервере 2. После некоторого ожидания я нажимаю кнопку Отмена, и мне нужно, чтобы задача была отменена.

Как я могу это сделать?


person melnynet    schedule 05.10.2014    source источник


Ответы (1)


Хотя вы можете это сделать, обычно не рекомендуется создавать длительную задачу в ASP.NET, особенно если это фоновые задачи.

У Фила Хаака есть отличная статья на эту тему — http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx/

Вот еще одна хорошая статья на эту тему — http://blog.stephencleary.com/2012/12/returning-early-from-aspnet-requests.html

Для этого вы можете рассмотреть такие вещи, как шина сообщений. Вы также можете рассмотреть простую таблицу TaskQueue в базе данных, в которую ваше веб-приложение будет вставлять запись, соответствующую вашей задаче со статусом «Ожидание». Затем у вас может быть фоновая служба (например, служба Windows), которая считывает «ожидающие» задачи и помечает их как «в процессе» во время обработки и «завершено», когда она завершена. Таким образом, пока задача находится в состоянии «Ожидание», вы можете попросить пользователя отменить задачу из пользовательского интерфейса, что просто удалит запись «Ожидание» из базы данных.

Другой вариант — использовать такое решение — http://hangfire.io/.

person govin    schedule 05.10.2014