Запуск многолетней фоновой задачи
Пользователь запросит некоторую страницу на моем веб-сайте.
Что я хочу делать? Отправьте пользователю быстрый ответ и запустите фоновое задание, которое занимает много времени.
Это выглядит так:
public ActionResult index()
{
var task = new Task(Stuff);
//start task async
task.start();
return View();
}
public void Stuff()
{
//long time operation
}
Как я могу это сделать?
Ответы
Ответ 1
Вы можете передать метод Task StartNew() параметр, который указывает, что запущенная задача "длинная", которая дает подсказку планировщику заданий для запуска задачи в новом потоке.
var task = Task.Factory.StartNew(Stuff, TaskCreationOptions.LongRunning);
Ответ 2
Вот пример из MSDN http://msdn.microsoft.com/en-us/library/ms978607.aspx#diforwc-ap02_plag_howtomultithread
Хотя вам это нужно для ASP.NET MVC, вы можете использовать основную идею этого примера ASP.NET WebForms.
Подход создает рабочий поток для выполнения вашей работы, запускает его и отправляет пользователю "ожидающую" страницу. Эта страница ожидания будет обновляться каждые N секунд, ища результаты, обрабатываемые рабочим потоком. Когда он заканчивается, страница "Ожидание" показывает результаты.
Ответ 3
вы хотите определить делегата и отключить его перед возвратом. См. Например: http://msdn.microsoft.com/en-us/magazine/cc301332.aspx