Operações assíncronas (WCF Data Services)Asynchronous Operations (WCF Data Services)

Importante

O WCF Data Services foi preterido e não estará mais disponível para download no centro de download da Microsoft.WCF Data Services has been deprecated and will no longer be available for download from the Microsoft Download Center. WCF Data Services versões anteriores com suporte do protocolo Microsoft OData (v1-v3) e não estão em desenvolvimento ativo.WCF Data Services supported earlier versions of the Microsoft OData (V1-V3) protocol only and has not been under active development. O OData v1-v3 foi substituído pelo OData v4, que é um padrão do setor publicado pela OASIS e ratificado pela ISO.OData V1-V3 has been superseded by OData V4, which is an industry standard published by OASIS and ratified by ISO. O OData v4 tem suporte por meio das bibliotecas principais compatíveis com o OData v4 disponíveis em Microsoft. OData. Core.OData V4 is supported through the OData V4 compliant core libraries available at Microsoft.OData.Core. A documentação de suporte está disponível em OData.net, e as bibliotecas de serviço OData v4 estão disponíveis em Microsoft. AspNetCore. OData.Support documentation is available at OData.Net, and the OData V4 service libraries are available at Microsoft.AspNetCore.OData.

RESTier é o sucessor de WCF Data Services.RESTier is the successor to WCF Data Services. O RESTier ajuda a inicializar uma interface REST padronizada, passível de consulta e com base em HTTP em minutos.RESTier helps you bootstrap a standardized, queryable, HTTP-based REST interface in minutes. Assim como WCF Data Services antes dela, o Restier fornece maneiras simples e diretas de Formatar consultas e interceptar envios antes e depois que eles atingirem o banco de dados.Like WCF Data Services before it, Restier provides simple and straightforward ways to shape queries and intercept submissions before and after they hit the database. E, assim como a API Web + OData, você ainda tem a flexibilidade de adicionar suas próprias consultas e ações personalizadas com técnicas com as quais você já está familiarizado.And like Web API + OData, you still have the flexibility to add your own custom queries and actions with techniques you're already familiar with.

Os aplicativos Web devem acomodar uma latência maior entre cliente e servidor do que os aplicativos que são executados dentro das redes internas.Web applications must accommodate higher latency between client and server than applications that run inside internal networks. Para otimizar o desempenho e a experiência do usuário do seu aplicativo, é recomendável usar os métodos assíncronos das DataServiceContext DataServiceQuery<TElement> classes e ao acessar WCF Data Services servidores pela 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 Services servers over the Web.

Embora os servidores de WCF Data Services processem solicitações HTTP de forma assíncrona, alguns métodos das bibliotecas de cliente do WCF Data Services são síncronos e aguardam até que toda a troca de solicitação-resposta seja concluída antes de continuar a execução.Although the WCF Data Services servers process HTTP requests asynchronously, some methods of the WCF Data Services client libraries are synchronous and wait until the entire request-response exchange is completed before continuing execution. Os métodos assíncronos do WCF Data Services bibliotecas de cliente não esperam que essa troca seja concluída e pode permitir que seu aplicativo mantenha uma interface do usuário responsiva enquanto isso.The asynchronous methods of the WCF 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.

Você pode executar operações assíncronas usando um par de métodos nas DataServiceContext DataServiceQuery<TElement> classes e que começam com begin e end , respectivamente.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. Os métodos begin registram um delegado que o serviço chama quando a operação é concluída.The Begin methods register a delegate that the service calls when the operation is complete. Os métodos end devem ser chamados no delegado que está registrado para manipular o retorno de chamada das operações concluídas.The End methods should be called in the delegate that is registered to handle the callback from the completed operations. Ao chamar o método end para concluir uma operação assíncrona, você deve fazer isso na mesma DataServiceQuery<TElement> instância ou DataServiceContext que você usou para iniciar a operação.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. Cada método begin usa um state parâmetro que pode passar um objeto de estado para o retorno de chamada.Each Begin method takes a state parameter that can pass a state object to the callback. Esse objeto de estado é recuperado do IAsyncResult que é fornecido com o retorno de chamada e é usado para chamar o método end correspondente para concluir a operação assíncrona.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. Por exemplo, quando você fornece a instância DataServiceQuery<TElement> como o parâmetro state quando chama o método BeginExecute na instância, a mesma instância DataServiceQuery<TElement> é retornada pelo 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. Essa instância de DataServiceQuery<TElement> é em seguida usada para chamar o método EndExecute para concluir a operação de consulta.This instance of DataServiceQuery<TElement> is then used to call the EndExecute method to complete the query operation. Para obter mais informações, consulte How to: execute assíncronas Data Service queries.For more information, see How to: Execute Asynchronous Data Service Queries.

Observação

Somente operações assíncronas têm suporte pelas bibliotecas de cliente que são fornecidas no .NET Framework para Silverlight.Only asynchronous operations are supported by the client libraries that are provided in the .NET Framework for Silverlight. Para obter mais informações, consulte WCF Data Services (Silverlight).For more information, see WCF Data Services (Silverlight).

As bibliotecas de cliente do .NET Framework dão suporte às seguintes operações assíncronas:The .NET Framework client libraries support the following asynchronous operations:

OperaçãoOperation MétodosMethods
Executando uma DataServiceQuery<TElement>.Executing a DataServiceQuery<TElement>. - BeginExecute
- EndExecute
Executando uma consulta do DataServiceContext.Executing a query from the DataServiceContext. - BeginExecute
- EndExecute
Executando uma consulta em lote do DataServiceContext.Executing a batch query from the DataServiceContext. - BeginExecuteBatch
- EndExecuteBatch
Carregando uma entidade relacionada no DataServiceContext.Loading a related entity into the DataServiceContext. - BeginLoadProperty
- EndLoadProperty
Salvando alterações nos objetos no DataServiceContextSaving changes to objects in the DataServiceContext - BeginSaveChanges
- EndSaveChanges

Considerações de threads para operações assíncronasThreading Considerations for Asynchronous Operations

Em um aplicativo multi-threaded, o delegado registrado como um retorno de chamada para a operação assíncrona não é necessariamente invocado no mesmo thread que foi usado para chamar o método begin , que cria a solicitação inicial.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. Em um aplicativo em que o retorno de chamada deve ser invocado em um thread específico, você deve realizar marshaling explicitamente da execução do método end , que manipula a resposta, para o thread desejado.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. Por exemplo, em aplicativos baseados no Windows Presentation Foundation (WPF) e aplicativos baseados no Silverlight, a resposta deverá ser lido de volta para o thread de interface de usuário usando o método BeginInvoke no objeto 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. Para obter mais informações, consulte consultando o serviço de dados (WCF Data Services/Silverlight).For more information, see Querying the Data Service (WCF Data Services/Silverlight).

Consulte tambémSee also