Acabo de empezar a usar AsyncController en mi proyecto para encargarme de algunos informes de larga ejecución. Parecía ideal en ese momento, ya que podía iniciar el informe y luego realizar algunas otras acciones mientras esperaba que volviera y llenara elementos en la pantalla.El controlador asíncrono está bloqueando las solicitudes en ASP.NET MVC a través de jQuery
Mi controlador se parece un poco a esto. He intentado utilizar un hilo para realizar la larga tarea que yo esperaba que liberaría el controlador para tener más solicitudes:
public class ReportsController : AsyncController
{
public void LongRunningActionAsync()
{
AsyncManager.OutstandingOperations.Increment();
var newThread = new Thread(LongTask);
newThread.Start();
}
private void LongTask()
{
// Do something that takes a really long time
//.......
AsyncManager.OutstandingOperations.Decrement();
}
public ActionResult LongRunningActionCompleted(string message)
{
// Set some data up on the view or something...
return View();
}
public JsonResult AnotherControllerAction()
{
// Do a quick task...
return Json("...");
}
}
Pero lo que estoy encontrando es que cuando llamo LongRunningAction usando la solicitud Ajax jQuery, cualquier otra solicitud que realice después de esa copia de seguridad y no se procesa hasta que se complete LongRunningAction. Por ejemplo, llame a LongRunningAction, que demora 10 segundos y luego llama a AnotherControllerAction, que es menos de un segundo. AnotherControllerAction simplemente espera hasta que LongRunningAction finalice antes de devolver un resultado.
también he comprobado el código de jQuery, pero esto todavía sucede si fijo específicamente "asíncrono: true":
$.ajax({
async: true,
type: "POST",
url: "/Reports.aspx/LongRunningAction",
dataType: "html",
success: function(data, textStatus, XMLHttpRequest) {
// ...
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
// ...
}
});
Por el momento sólo tengo que asumir que estoy usando de manera incorrecta, ¡Pero espero que uno de ustedes pueda despejar mi bloqueo mental!
¿Está haciendo esto en IIS o WebDev? WebDev es, um, "menos agresivamente multiproceso" que IIS. –
Tengo el mismo problema, ¿cómo resolvió el problema? – Tomas