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.
fonte
2011-11-16 15:29:17
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? –
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". –
@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