非同步作業 (WCF Data Services)
相較於在內部網路中執行的應用程式,Web 應用程式必須可容納用戶端與伺服器之間更高的延遲。 若要最佳化應用程式的效能及使用者經驗,我們建議您在透過 Web 存取 WCF Data Services 伺服器時,使用 DataServiceContext 和 DataServiceQuery<TElement> 類別的非同步方法。
雖然 WCF Data Services 伺服器會非同步處理 HTTP 要求,但是 WCF Data Services 用戶端程式庫的部分方法還是會同步,而且在繼續執行之前會等候整個要求回應交換完成為止。 WCF Data Services 用戶端程式庫的非同步方法不會等候此交換完成,且它可讓您的應用程式同一時間維持回應的使用者介面。
您可以針對分別從 Begin 和 End 開始的 DataServiceContext 與 DataServiceQuery<TElement> 類別使用一組方法來執行非同步作業。 作業完成時,Begin 方法會註冊服務呼叫的委派。 在註冊的委派中應該呼叫 End 方法,以處理來自已完成作業的回呼。 當您呼叫 End 方法來完成非同步作業時,必須從您用來開始作業的相同 DataServiceQuery<TElement> 或 DataServiceContext 執行個體進行。 每個 Begin 方法都會採用 state 參數,這個參數可以將狀態物件傳遞至回呼。 這個狀態物件擷取自與回呼一起提供的 IAsyncResult,且用於呼叫對應的 End 方法來完成非同步作業。 例如,如果您在執行個體上呼叫 BeginExecute 方法,提供 DataServiceQuery<TElement> 執行個體做為 state 參數時,IAsyncResult 會傳回同一個 DataServiceQuery<TElement> 執行個體。 接著會使用這個 DataServiceQuery<TElement> 執行個體呼叫 EndExecute 方法,以完成查詢作業。 如需詳細資訊,請參閱 HOW TO:執行非同步資料服務查詢 (WCF Data Services)。
注意
.NET Framework for Silverlight 中提供的用戶端程式庫只支援非同步作業。如需詳細資訊,請參閱 WCF Data Services (Silverlight)。
.NET Framework 用戶端程式庫支援下列非同步作業:
作業 |
方法 |
---|---|
從 DataServiceContext 執行查詢。 |
|
從 DataServiceContext 執行批次查詢。 |
|
將相關實體載入至 DataServiceContext。 |
|
將物件的變更儲存於 DataServiceContext |
非同步作業的執行緒考量
在多執行緒的應用程式中,不一定要在用來呼叫建立初始要求之 Begin 方法的相同執行緒上叫用註冊為非同步作業之回呼的委派。 在必須針對特定執行緒叫用回呼的應用程式中,您必須明確地將處理回應之 End 方法的執行封送處理至所需的執行緒。 例如,在以 Windows Presentation Foundation (WPF) 為基礎的應用程式以及以 Silverlight 為基礎的應用程式中,必須在 Dispatcher 物件上使用 BeginInvoke 方法將回應封送回 UI 執行緒。 如需詳細資訊,請參閱Querying the Data Service (WCF Data Services/Silverlight)。