2011-02-08 17 views
7

La modifica di un controller sincrono ASP.NET MVC (Controller) su un controller asincrono (AsyncController) sembra una cosa banale da fare, ma quando è necessario farlo?Quando utilizzare i controller asincroni in ASP.NET MVC?

Devo eseguire ogni controller asincrono indipendentemente dalle sue azioni? Quali sono esempi di operazioni che sarebbero migliorate se utilizzate in un controller asincrono?

Prendendo l'esempio più banale: pagine html statiche. Quindi hai il controller di base che restituisce semplicemente un View dall'azione Index. Questo controller dovrebbe essere modificato in modo asincrono, ovvero ora restituito da IndexCompleted?

+2

Possibile duplicato di [controller Async ASPCNET MVC4 - Perché utilizzare?] (Http://stackoverflow.com/questions/15190112/asp-net-mvc4-async-controller-why-touse) – Luiso

+0

@ Luiso La mia domanda è stata posta due anni prima. –

risposta

8

Stavo leggendo questo article di recente. Pensa che riassuma ciò per cui AsyncController è pensato.

6

So che questa è una domanda vecchia ma ho faticato per ottenere la risposta, quindi ecco i miei due centesimi.

È come dire che se non abbiamo la febbre, dovrei comunque prendere una pillola. Dovresti usare il controller Asynch se vedi thread starvation sul tuo server web. Il server Web IIS gestisce un pool di thread. Quindi, quando arriva una richiesta, recupera il thread dal pool di thread. Se in un dato momento vengono utilizzati tutti i thread del pool e la richiesta arriva, quella richiesta entra in una modalità di attesa. Questa situazione è definita "Fame inedia". È inoltre possibile guardare questo video youtube in cui ho dimostrato come MVC discussione la fame sembra

http://www.youtube.com/watch?v=wvg13n5V0V0

Web Server Thread Use Diagram

Quando si effettua il controller come Asynch, utilizza il filo, genera il operazione e sposta quel thread indietro nel pool di thread in modo che possa essere utilizzato per altre richieste che arrivano all'applicazione MVC. Una volta terminata l'operazione, ritira il thread dal pool di thread e visualizza la vista.