фоновый рабочий блокирует действие контроллера MVC - PullRequest
5 голосов
/ 05 октября 2010

Я хочу запустить некоторый код из действия контроллера ASP.NET MVC в новом потоке / асинхронно. Меня не волнует ответ, я хочу запустить, забыть и вернуть пользователю представление, пока асинхронный метод работает в фоновом режиме. Я думал, что класс BackgroundWorker подходит для этого?

public ActionResult MyAction()
{
    var backgroundWorker = new BackgroundWorker();
    backgroundWorker.DoWork += Foo;
    backgroundWorker.RunWorkerAsync();

    return View("Thankyou");
}

void Foo(object sender, DoWorkEventArgs e)
{
    Thread.Sleep(10000);
}

Почему этот код вызывает 10-секундную задержку перед возвратом просмотра? Почему представление не возвращается мгновенно?

Если говорить более конкретно, что мне нужно сделать, чтобы эта работа работала?

Спасибо

1 Ответ

7 голосов
/ 05 октября 2010

Вы можете просто начать новую тему:

public ActionResult MyAction()
{
    var workingThread = new Thread(Foo);
    workingThread.Start();

    return View("Thankyou");
}

void Foo()
{
    Thread.Sleep(10000);
}
...