In WebForms Sito ASP.NET (IIS, pool di app singole), ho chiamato il metodo di servizio Web esteso a cui fa riferimento Visual Studio come riferimento di servizio (.NET 4.0). Sfortunatamente devo aspettare le informazioni dal servizio web prima di poter servire la pagina all'utente. Attualmente il servizio Web è chiamato in modo sincrono, quindi il server non può riutilizzare il thread corrente per elaborare altre richieste che hanno un impatto sulle prestazioni.Come attendere il risultato della chiamata al servizio web asincrono in ASP.NET per le migliori prestazioni
Naturalmente posso generare operazioni asincrone per riferimento di servizio in Visual Studio e chiamare BeginGetFoo
anziché GetFoo
, ma devo ancora attendere in qualche modo il risultato del servizio web.
Ecco che arriva la domanda. Se utilizzo AsyncWaitHandle.WaitOne
(come di seguito) sarà meglio in termini di prestazioni dell'intera applicazione dalla chiamata sincrona che uso oggi?
IAsyncResult result = fooSoapClient.BeginGetFoo();
result.AsyncWaitHandle.WaitOne();
var foo = fooSoapClient.EndGetFoo(result);
E, naturalmente, se l'attesa può essere fatta meglio, sono aperto a suggerimenti.
Si consiglia di leggere la seguente documentazione: http://msdn.microsoft.com/en-us/library/2e08f6yc(v=vs.100).aspx come risposta al proprio questin soggettivo. Non hai fornito informazioni sufficienti –
Per prestazioni ottimali, non aspettare, ma impostare le continuazioni. Il codice che hai postato fa più o meno lo stesso di una chiamata sincrona. – millimoose
@Ramhound - L'ho letto. Di quali informazioni hai bisogno, sarò lieto di aggiungerlo? – Pol