2011-05-05 10 views
6

En los controladores 2 asíncronos ASP.NET MVC, podemos hacer algo como esto:En los controladores asincrónicos ASP.NET MVC 2, ¿los filtros de acción se ejecutan de forma asíncrona?

public class SomeController : AsyncController 
{ 
    [Blurb] 
    public void FooAsync() 
    { 
     this.AsyncManager.OutstandingOperations.Increment(); 

     Task.Factory.StartNew(
      () => 
      { 
       this.AsyncManager.Parameters["result"] = new BazResult(); 
       this.AsyncManager.OutstandingOperations.Decrement(); 
      }); 
    } 

    public ActionResult FooCompleted(ActionResult result) 
    { 
     return result; 
    } 
} 

Mi pregunta es, ¿el filtro de acción "Comentario" en este caso, ejecutar de forma asincrónica? En otras palabras, ¿su naturaleza síncrona se envuelve automáticamente en una llamada asincrónica?

Respuesta

2

Eché un vistazo bajo las fundas al AsyncControllerActionInvoker y parece que de hecho las envuelve en un conjunto de llamadas asincrónicas y continuaciones. Realiza una llamada al BeginInvokeActionMethodWithFilters que a su vez configura InvokeActionMethodFilterAsynchronously.

Para quienes tengan curiosidad, la fuente es codeplex.

+0

Entonces, ¿el filtro se ejecuta en otro hilo? ¿BeginInvoke no utiliza un hilo de subprocesos? ¿Eso no derrota el propósito de una llamada asíncrona? –

+0

Según tengo entendido, las llamadas asíncronas no utilizan el mismo grupo de subprocesos que usan las solicitudes web, por lo que IIS no se enfrenta a la falta de subprocesos. –

Cuestiones relacionadas