Quiero ejecutar código de una acción de controlador MVC de ASP.NET en un hilo nuevo/asincrónicamente. No me importa la respuesta, quiero disparar y olvidar y devolver al usuario una vista mientras el método async se ejecuta en segundo plano. Pensé que la clase BackgroundWorker
era apropiada para esto?backgroundworker bloqueando la acción del controlador 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);
}
¿Por qué este código causa que haya un retraso de 10 segundos antes de devolver la Vista? ¿Por qué no se devuelve la vista al instante?
Más al punto, ¿qué tengo que hacer para que esto funcione?
Gracias
Cheers, preguntando por qué el fondo trabajó bloques sin embargo? –
Puede ver el código de souvenir de BackgroundWorker para averiguarlo. BackgroundWorker es el componente WinForms y creo que no es correcto usarlo en ASP.NET. – bniwredyc
En lugar de renovar subprocesos manualmente, probablemente debería usar ThreadPool.QueueUserWorkItem –