2010-10-05 2 views
5

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

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-секундную задержку перед возвратом вида? Почему isnt View возвращен мгновенно?

Подробнее, что мне нужно сделать, чтобы сделать эту работу?

Благодаря

ответ

7

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

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

    return View("Thankyou"); 
} 

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

Cheers, просто интересно, почему фон работали блоки, хотя? –

+1

Вы можете увидеть код суфпорта BackgroundWorker, чтобы узнать. BackgroundWorker - компонент WinForms, и я думаю, что использовать его в ASP.NET нецелесообразно. – bniwredyc

+3

Вместо того, чтобы создавать новые темы вручную, вы должны, вероятно, использовать ThreadPool.QueueUserWorkItem –

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

  • Нет связанных вопросов^_^