Подтвердить что ты не робот

Запуск многолетней фоновой задачи

Пользователь запросит некоторую страницу на моем веб-сайте.

Что я хочу делать? Отправьте пользователю быстрый ответ и запустите фоновое задание, которое занимает много времени. Это выглядит так:

public ActionResult index()
{
    var task = new Task(Stuff);

    //start task async
    task.start(); 

    return View();
}

public void Stuff()
{
    //long time operation    
}

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

4b9b3361

Ответ 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 секунд, ища результаты, обрабатываемые рабочим потоком. Когда он заканчивается, страница "Ожидание" показывает результаты.