4

Я использую EF6, MVC 5 в VS 2013. У меня длинная работающая задача, которая вызывает ошибки таймаута, и поэтому я хочу настроить ее как отдельную фоновое задание и вернуть немедленно к веб-контроллеру. Фоновая задача будет сообщать о прогрессе в базе данных SQL-сервера. Мне нужно, по существу, пожара и забыть функциональность. Там, как представляется, несколько вариантов:Как создать многолетнюю фокусную задачу из MVC

  1. Пишут задачи детали к серверу и использовать службу Windows, чтобы обработать их UPDATE: это опции, используемые
  2. Использование async - это не кажется, безопасный вариант
  3. Использование HostingEnvironment.QueueBackgroundWorkItem Метод

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

+1

Или [ASP.NET долго работающая задача. Тема прерывается исключение] (http://stackoverflow.com/questions/16254567/asp-net-long-running-task-thread-is-being-aborted-exception), [Как реализовать очень долгую фоновую задачу в приложении Asp WebAPI] (http://stackoverflow.com/questions/21153329/how-to-implement-a-very-long-running-background-task-in-asp-webapi-application), [Длинные задачи - Best Practice - ASP.NET 4.0, C#] (http://stackoverflow.com/questions/9577112/) и т. Д. Напечатайте «asp.net long running task» в своей любимой поисковой системе и идите читать, почему вы хотите вариант 1. – CodeCaster

+1

@CodeCaster благодарит. Я написал это как службу Windows. С тех пор он работает спокойно и эффективно. –

+0

спасибо, приятно слышать. – CodeCaster

ответ

3

HostingEnvironment.QueueBackgroundWorkItem - это valid solution, но имейте в виду, что длительный процесс может быть прерван, например если пул приложений перерабатывается.

Лучшим вариантом было бы запустить его в запланированной задаче, например, используя Quartz.NET.

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