2011-05-05 9 views
6

w ASP.NET MVC kontrolerów 2 asynchronicznych, możemy zrobić coś takiego:W asynchronicznych kontrolerach ASP.NET MVC 2, czy filtry akcji są wykonywane asynchronicznie?

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; 
    } 
} 

Moje pytanie brzmi, czy filtr działanie „Blurb” w tym przypadku wykonać asynchronicznie? Innymi słowy, czy jego synchroniczna natura jest automatycznie zawijana w asynchroniczne wywołanie?

Odpowiedz

2

Spojrzałem pod osłonami pod AsyncControllerActionInvoker i wygląda na to, że rzeczywiście zawija je w zestaw asynchronicznych połączeń i kontynuacji. Nawiązuje połączenie z BeginInvokeActionMethodWithFilters, które z kolei tworzy InvokeActionMethodFilterAsynchronously.

Dla tych, którzy są ciekawi, źródłem jest codeplex.

+0

Czy filtr jest wykonywany w jeszcze innym wątku? Czy BeginInvoke nie używa wątku wątku? Czy to nie pokonuje celu połączenia asynchronicznego? –

+0

Rozumiem, że wywołania asynchroniczne nie używają tej samej puli wątków, której używają żądania internetowe, więc usługi IIS nie są narażone na głód wątków. –

Powiązane problemy