Operazioni asincrone (WCF Data Services)Asynchronous Operations (WCF Data Services)

Le applicazioni Web devono includere una latenza tra client e server superiore a quella delle applicazioni eseguite in reti interne.Web applications must accommodate higher latency between client and server than applications that run inside internal networks. Per ottimizzare le prestazioni e l'esperienza utente dell'applicazione, si consiglia di usare i metodi asincroni delle classi DataServiceContext e DataServiceQuery<TElement> in caso di accesso ai server di WCF Data ServicesWCF Data Services sul Web.To optimize the performance and user experience of your application, we recommend using the asynchronous methods of the DataServiceContext and DataServiceQuery<TElement> classes when accessing WCF Data ServicesWCF Data Services servers over the Web.

Sebbene i server di WCF Data ServicesWCF Data Services elaborino le richieste HTTP in modo asincrono, alcuni metodi delle librerie client di WCF Data ServicesWCF Data Services sono sincroni e attendono il completamento dell'intero scambio richiesta-risposta prima di continuare l'esecuzione.Although the WCF Data ServicesWCF Data Services servers process HTTP requests asynchronously, some methods of the WCF Data ServicesWCF Data Services client libraries are synchronous and wait until the entire request-response exchange is completed before continuing execution. I metodi asincroni delle librerie client di WCF Data ServicesWCF 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.The asynchronous methods of the WCF Data ServicesWCF Data Services client libraries do not wait for this exchange to complete and can allow your application to maintain a responsive user interface in the meantime.

È possibile eseguire le operazioni asincrone utilizzando una coppia di metodi sul DataServiceContext e DataServiceQuery<TElement> classi che iniziano con iniziare e fine rispettivamente.You can perform asynchronous operations by using a pair of methods on the DataServiceContext and DataServiceQuery<TElement> classes that start with Begin and End respectively. Il iniziare metodi registrano un delegato che il servizio viene chiamato quando l'operazione è stata completata.The Begin methods register a delegate that the service calls when the operation is complete. Il fine metodi devono essere chiamati nel delegato registrato per gestire il callback dalle operazioni completate.The End methods should be called in the delegate that is registered to handle the callback from the completed operations. Quando si chiama il fine metodo per completare un'operazione asincrona, è necessario eseguire questa operazione dalla stessa DataServiceQuery<TElement> o DataServiceContext istanza utilizzato per avviare l'operazione.When you call the End method to complete an asynchronous operation, you must do so from the same DataServiceQuery<TElement> or DataServiceContext instance that you used to begin the operation. Ogni iniziare metodo accetta un state parametro che è possibile passare un oggetto di stato al callback.Each Begin method takes a state parameter that can pass a state object to the callback. Questo oggetto stato viene recuperato dal IAsyncResult che viene fornito con il callback e viene utilizzata per chiamare il corrispondente fine metodo per completare l'operazione asincrona.This state object is retrieved from the IAsyncResult that is supplied with the callback and is used to call the corresponding End method to complete the asynchronous operation. Ad esempio, quando si fornisce l'istanza di DataServiceQuery<TElement> come parametro state durante la chiamata del metodo BeginExecute sull'istanza, la stessa istanza di DataServiceQuery<TElement> viene restituita da IAsyncResult.For example, when you supply the DataServiceQuery<TElement> instance as the state parameter when you call the BeginExecute method on the instance, the same DataServiceQuery<TElement> instance is returned by the IAsyncResult. Questa istanza di DataServiceQuery<TElement> viene quindi usata per chiamare il metodo EndExecute per completare l'operazione di query.This instance of DataServiceQuery<TElement> is then used to call the EndExecute method to complete the query operation. Per ulteriori informazioni, vedere procedura: eseguire query sul servizio di dati asincrono.For more information, see How to: Execute Asynchronous Data Service Queries.

Nota

Solo le operazioni asincrone sono supportate dalle librerie client fornite in .NET Framework per Silverlight.Only asynchronous operations are supported by the client libraries that are provided in the .NET Framework for Silverlight. Per ulteriori informazioni, vedere WCF Data Services (Silverlight).For more information, see WCF Data Services (Silverlight).

Le librerie client di .NET Framework supportano le operazioni asincrone seguenti:The .NET Framework client libraries support the following asynchronous operations:

OperazioneOperation MetodiMethods
Esecuzione di un oggetto DataServiceQuery<TElement>.Executing a DataServiceQuery<TElement>. - BeginExecute
- EndExecute
Esecuzione di una query dall'oggetto DataServiceContext.Executing a query from the DataServiceContext. - BeginExecute
- EndExecute
Esecuzione di una query batch dall'oggetto DataServiceContext.Executing a batch query from the DataServiceContext. - BeginExecuteBatch
- EndExecuteBatch
Caricamento di un'entità correlata nell'oggetto DataServiceContext.Loading a related entity into the DataServiceContext. - BeginLoadProperty
- EndLoadProperty
Salvataggio di modifiche nell'oggetto DataServiceContextSaving changes to objects in the DataServiceContext - BeginSaveChanges
- EndSaveChanges

Considerazioni sul threading per operazioni asincroneThreading Considerations for Asynchronous Operations

In un'applicazione a thread multipli, che viene registrato come un callback per l'operazione asincrona viene richiamato il delegato non necessariamente sullo stesso thread che è stato utilizzato per chiamare il iniziare metodo, che crea la richiesta iniziale.In a multi-threaded application, the delegate that is registered as a callback for the asynchronous operation is not necessarily invoked on the same thread that was used to call the Begin method, which creates the initial request. In un'applicazione in cui il callback deve essere richiamato su un thread specifico, è necessario effettuare il marshalling esplicito l'esecuzione del fine metodo che gestisce la risposta, al thread desiderato.In an application where the callback must be invoked on a specific thread, you must explicitly marshal the execution of the End method, which handles the response, to the desired thread. 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 usando il metodo BeginInvoke sull'oggetto Dispatcher.For example, in Windows Presentation Foundation (WPF)-based applications and Silverlight-based applications, the response must be marshaled back to the UI thread by using the BeginInvoke method on the Dispatcher object. Per ulteriori informazioni, vedere l'esecuzione di query del servizio dati (WCF Data Services/Silverlight).For more information, see Querying the Data Service (WCF Data Services/Silverlight).

Vedere ancheSee Also

Libreria client WCF Data ServicesWCF Data Services Client Library