Запустить долгое время фоновую задачу - PullRequest
13 голосов
/ 13 марта 2012

Пользователь запрашивает страницу на моем сайте.

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

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

    //start task async
    task.start(); 

    return View();
}

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

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

Ответы [ 3 ]

19 голосов
/ 13 марта 2012

В метод Task StartNew () можно передать параметр, который указывает, что запускаемая задача «долго выполняется», что дает подсказку планировщику задач для запуска задачи в новом потоке.

var task = Task.Factory.StartNew(Stuff, TaskCreationOptions.LongRunning);
4 голосов
/ 13 марта 2012

Вот пример из MSDN http://msdn.microsoft.com/en-us/library/ms978607.aspx#diforwc-ap02_plag_howtomultithread

Хотя это необходимо для ASP.NET MVC, вы можете использовать основную идею этого примера веб-форм ASP.NET.

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

0 голосов
/ 13 марта 2012

Вы хотите определить делегата и запустить его перед возвратом.См. Например: http://msdn.microsoft.com/en-us/magazine/cc301332.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...