2011-11-16 12 views
5

Quando si chiama BeginInvoke su un delegato, l'azione viene eseguita su un thread separato. Se chiamato in ASP.NET usa un thread di lavoro CLR? O usa un thread di lavoro IIS?utilizzando delegati in ASP.NET per gestire operazioni asincrone

In quest'ultimo caso, sarà necessario utilizzare un modello ASP.NET asincrono per garantire che l'azione venga eseguita su un thread di lavoro CLR. Ma preferirei non farlo se l'azione finisce lì su BeginInvoke.

risposta

6

utilizza un thread di lavoro CLR.

come descritto nella here

Per cominciare, ASP.NET utilizza il pool di thread CLR-processo a livello di richieste di servizio (per più di fondo sul pool di thread CLR, vedere la colonna di .NET in questo numero).

EDIT:

un'altra risorsa è this blog

Purtroppo, il filo usato da BeginInvoke è in realtà preso dal pool di thread stesso lavoratore che viene utilizzato da ASP.Net per gestire pagina Richieste

+0

Grazie. MVC supporta un modello asincrono. Sembra che se si sfrutta questo insieme con la tecnica BeginInvoke, la mia pagina tornerà veloce e il lavoro non occuperà un thread di lavoro IIS. Corretta? –

+0

Rileggendo quel post del blog, posso semplicemente fare una tecnica Thread.Start(). Per la mia applicazione non avrò il rischio di più di una manciata di uno qualsiasi di questi processi che si verificano in un momento (di solito solo 1), quindi è probabilmente la soluzione più facile/più gestibile a questo punto per le mie esigenze. Per chi segue, cerca nel post del blog la frase "Bene, userò Thread.Start() e creerò il mio thread". –

+0

@John Sì hai ragione. se vuoi solo restituire la pagina velocemente, senza che l'utente sia a conoscenza dei risultati, va bene. ma non migliorerà le prestazioni. – Mithir

1

L'utilizzo/gestione dei thread è leggermente diverso in IIS6, IIS7 e IIS 7.5.

abbastanza dettagli e spiegazioni aggiornati qui:

ASP.NET Thread Usage on IIS 7.5, IIS 7.0, and IIS 6.0

Non sono sicuro se questo risponde alla tua domanda, ma una buona lettura in ogni modo.

1

L'utilizzo di un delegato personalizzato e la chiamata del metodo BeginInvoke offrono un modo rapido per attivare i thread di lavoro per l'applicazione. Ma sfortunatamente, danneggiano le prestazioni complessive della tua applicazione dal momento che consumano thread dallo stesso pool utilizzato da ASP.NET per gestire le richieste HTTP.

Ricorda anche che se il callback del metodo Asynchronous è importante, è necessario bloccare il thread principale per tornare al client fino al completamento del processo asincrono. Se la registrazione e l'analisi sono una chiamata al metodo "ignora e dimentica", le cose sono più facili e puoi semplicemente attivare il metodo e consentire al server di rispondere al client. Tuttavia, se la richiamata è importante e il server ha completato l'elaborazione, non si verifica nulla sul server per gestire la richiamata una volta completata; questo è il caso in cui l'elaborazione asincrona sul server per le applicazioni ASP.NET differisce da quella di un'applicazione WinForms.

Problemi correlati