Sto utilizzando metodi asincroni in alcuni dei miei progetti e mi piace perché consente alla mia applicazione di essere molto più scalabile. Tuttavia, mi chiedo come i metodi asincroni funzionano davvero in background? In che modo .NET (o Windows?) Sa che una chiamata è stata completata? A seconda del numero di chiamate asincrone che ho fatto, posso vedere che vengono creati nuovi thread (non sempre però ...). Perché?Come funzionano i metodi asincroni in C#?
Inoltre, vorrei monitorare quanto tempo occorre per completare una richiesta. Per testare il concetto, ho scritto il seguente codice che chiama in modo asincrono un servizio Web e immediatamente dopo avvia un cronometro.
for (int i = 0; i < 10000; i++)
{
myWebService.BeginMyMethod(new MyRequest(), result, new AsyncCallback(callback), i);
stopWatches[i].Start();
}
// Call back stop the stopwatch after calling EndMyMethod
Questo non funziona in quanto tutte le richieste (10000) hanno lo stesso inizio ora e la durata salirà linearmente (chiamata 0 = durata 1, chiamare il numero 1 = durata 2, ecc). Come posso monitorare la durata reale di una chiamata con metodo asincrono (dal momento in cui la richiesta viene effettivamente eseguita fino alla fine)?
UPDATE: Esiste un metodo asincrono bloccare il flusso? Comprendo che utilizza .NET ThreadPool
ma come un IAsyncResult
sa che una chiamata è completata ed è ora di chiamare il metodo CallBack
?
1. ThreadPool, 2. Vedere i dettagli su come funziona il ThreadPool ma non penso che ciò che si desidera sia possibile in un modo generico. http://msdn.microsoft.com/en-us/library/ms973903.aspx –