Operazioni asincrone (WCF Data Services)
Le applicazioni Web devono includere una latenza tra client e server superiore a quella delle applicazioni eseguite in reti interne. Per ottimizzare le prestazioni e l'esperienza utente dell'applicazione, si consiglia di utilizzare i metodi asincroni delle classi DataServiceContext e DataServiceQuery in caso di accesso ai server di WCF Data Services sul Web.
Sebbene i server di WCF Data Services elaborino le richieste HTTP in modo asincrono, alcuni metodi delle librerie client di WCF Data Services sono sincroni e attendono il completamento dell'intero scambio richiesta-risposta prima di continuare l'esecuzione. I metodi asincroni delle librerie client di WCF Data Services non attendono il completamento di questo scambio e consentono all'applicazione di mantenere nel frattempo il livello di risposta di un'interfaccia utente.
È possibile eseguire operazioni asincrone tramite una coppia di metodi sulle classi DataServiceContext e DataServiceQuery che iniziano rispettivamente con Begin e End. I metodi Begin registrano un delegato chiamato dal servizio al completamento dell'operazione. I metodi End devono essere chiamati nel delegato registrato per gestire il callback dalle operazioni completate. Quando si chiama il metodo End per completare un'operazione asincrona, è necessario eseguire questa operazione dalla stessa istanza di DataServiceQuery o DataServiceContext utilizzata per iniziare l'operazione. Ogni metodo Begin accetta un parametro state in grado di passare un oggetto di stato al callback. Questo oggetto di stato viene recuperato dall'oggetto IAsyncResult fornito con il callback e viene utilizzato per chiamare il metodo End corrispondente per completare l'operazione asincrona. Ad esempio, quando si fornisce l'istanza di DataServiceQuery come parametro state durante la chiamata del metodo BeginExecute sull'istanza, la stessa istanza di DataServiceQuery viene restituita da IAsyncResult. Questa istanza di DataServiceQuery viene quindi utilizzata per chiamare il metodo EndExecute per completare l'operazione di query. Per ulteriori informazioni, vedere Procedura: eseguire query asincrone sul servizio dati (WCF Data Services).
Nota: |
---|
Solo le operazioni asincrone sono supportate dalle librerie client fornite in .NET Framework per Silverlight.Per ulteriori informazioni, vedere WCF Data Services (Silverlight). |
Le librerie client di .NET Framework supportano le operazioni asincrone seguenti:
Operazione | Metodi |
---|---|
Esecuzione di un oggetto DataServiceQuery. |
|
Esecuzione di una query dall'oggetto DataServiceContext. |
|
Esecuzione di una query batch dall'oggetto DataServiceContext. |
|
Caricamento di un'entità correlata nell'oggetto DataServiceContext. |
|
Salvataggio di modifiche nell'oggetto DataServiceContext |
Considerazioni sul threading per operazioni asincrone
In un'applicazione multithread il delegato registrato come callback per l'operazione asincrona non viene richiamato necessariamente sullo stesso thread utilizzato per chiamare il metodo Begin che crea la richiesta iniziale. In un'applicazione in cui il callback deve essere richiamato su un thread specifico, è necessario effettuare il marshalling in modo esplicito dell'esecuzione del metodo End, che gestisce la risposta, al thread desiderato. Nelle applicazioni basate su Windows Presentation Foundation (WPF) e su Silverlight è ad esempio necessario che il marshalling della risposta venga effettuato di nuovo al thread dell'interfaccia utente utilizzando il metodo BeginInvoke sull'oggetto Dispatcher. Per ulteriori informazioni, vedere Querying the Data Service (WCF Data Services/Silverlight).