共用方式為


非同步作業 (WCF 資料服務)

相較於在內部網路中執行的應用程式,Web 應用程式必須可容納用戶端與伺服器之間更高的延遲。 若要最佳化應用程式的效能及使用者經驗,我們建議您在透過 Web 存取 WCF Data Services 伺服器時,使用 DataServiceContextDataServiceQuery 類別的非同步方法。

雖然 WCF Data Services 伺服器會非同步處理 HTTP 要求,但是 WCF Data Services 用戶端程式庫的部分方法還是會同步,而且在繼續執行之前會等候整個要求回應交換完成為止。 WCF Data Services 用戶端程式庫的非同步方法不會等候此交換完成,且它可讓您的應用程式同一時間維持回應的使用者介面。

您可以在分別以 BeginEnd 開頭的 DataServiceContextDataServiceQuery 類別使用一組方法執行非同步作業。 Begin 方法會註冊服務於作業完成時呼叫的委派。 註冊的委派中應會呼叫 End 方法,處理已完成作業所發出的回呼。 當您呼叫 End 方法來完成非同步作業時,您必須在用於開始作業的同一個 DataServiceQueryDataServiceContext 執行個體上執行此步驟。 每個 Begin 方法都會使用一個可將狀態物件傳遞至回呼的 state 參數。 這個狀態物件擷取自隨回呼提供的 IAsyncResult,並且用於呼叫對應的 End 方法來完成非同步作業。 例如,如果您在執行個體上呼叫 BeginExecute 方法,提供 DataServiceQuery 執行個體做為 state 參數,則 IAsyncResult 會傳回同一個 DataServiceQuery 執行個體。 接著會使用這個 DataServiceQuery 執行個體呼叫 EndExecute 方法,以完成查詢作業。 如需詳細資訊,請參閱 HOW TO:執行非同步資料服務查詢 (WCF Data Services)

Dd756365.note(zh-tw,VS.100).gif注意:
.NET Framework for Silverlight 中提供的用戶端程式庫只支援非同步作業。如需詳細資訊,請參閱 WCF Data Services (Silverlight) (英文)。

.NET Framework 用戶端程式庫支援下列非同步作業:

作業 方法

執行 DataServiceQuery

  • BeginExecute

  • EndExecute

DataServiceContext 執行查詢。

DataServiceContext 執行批次查詢。

將相關實體載入至 DataServiceContext

將物件的變更儲存於 DataServiceContext

非同步作業的執行緒考量

在多執行緒應用程式中,不一定會在用於呼叫 Begin 方法 (即為建立初始要求的方法) 的執行緒上叫用註冊為非同步作業回呼的委派。 在必須於特定執行緒上叫用回呼的應用程式中,您必須明確地將 End 方法的執行 (用來處理回應) 封送至所需的執行緒。 例如,在以 Windows Presentation Foundation (WPF) 為基礎的應用程式以及以 Silverlight 為基礎的應用程式中,必須在 Dispatcher 物件上使用 BeginInvoke 方法將回應封送回 UI 執行緒。 如需詳細資訊,請參閱Querying the Data Service (WCF Data Services/Silverlight)

另請參閱

其他資源

WCF Data Services 用戶端程式庫