OperationContractAttribute.AsyncPattern 屬性

定義

表示作業是使用 Begin< 服務合約中的methodName> 和 End<methodName> 方法組,以非同步方式實作。

public:
 property bool AsyncPattern { bool get(); void set(bool value); };
public bool AsyncPattern { get; set; }
member this.AsyncPattern : bool with get, set
Public Property AsyncPattern As Boolean

屬性值

true如果 methodName 方法與 End<methodName>> 方法相符,而且基礎結構可以視為在服務介面上實作為非同步方法組的作業,則為 ,否則 false 為 。 Begin< 預設為 false

範例

下列程式碼範例示範用戶端通道至一個服務合約,該合約同時包含 Add 的同步版與非同步版。 若用戶端使用該合約介面,則 BeginAddAdd 作業會叫用伺服器上的方法,而該方法可能是同步的,也可能是非同步的。 若使用該合約來實作服務,則傳入要求預設會分派給同步版方法。

[ServiceContract]  
public interface IAddTwoNumbers  
{  
    // If the asynchronous method pair  
    // appears on the client channel, the client can call   
    // them asynchronously to prevent blocking.  
    [OperationContract (AsyncPattern=true)]  
    IAsyncResult BeginAdd(int a, int b, AsyncCallback cb, AsyncState s);  

    [OperationContract]  
    int EndAdd(IAsyncResult r);  

    // This is a synchronous version of the BeginAdd/EndAdd pair.  
    // It appears in the client channel code by default.   
    [OperationContract]  
    int Add(int a, int b);  
   }  

備註

使用 AsyncPattern 屬性建置服務作業,伺服器、用戶端或兩者上可非同步呼叫該作業。 AsyncPattern 屬性通知執行階段某個 Begin 方法有符合的 End 方法,它們符合 .NET 架構的非同步方法設計模式。 建置實作服務作業的伺服器非同步方法,可提升伺服器延展性與效能,而不會影響服務用戶端。若某項服務作業必須傳回某些資訊給用戶端,但執行時間較長,又可採用非同步方式執行,則建議採用此種做法。

用戶端不受影響,因為伺服器上的非同步方法組是實作細節,不影響該作業的基礎 Web 服務描述語言 (WSDL) 描述。 這類方法會以單一作業的形式向用戶端顯示,其中包含 <input> 和相互關聯的 <output> 訊息。 WCF 會自動將輸入訊息路由傳送至 Begin<methodName> 方法,並將methodName> 呼叫的結果 End< 路由傳送至輸出訊息。 因此,用戶端通道可將該方法組表示成單一同步作業或非同步作業組。 用戶端的表示方式絕對不會影響到伺服器上的非同步實作。

用戶端合約可使用 AsyncPattern 屬性表示一組非同步方法組,用戶端可使用此方法組以非同步方式叫用該作業。 一般而言,用戶端應用程式會使用ServiceModel 中繼資料公用程式工具 (Svcutil.exe) 工具和 /async 選項來產生 Begin<方法Name> 和 End<methodName> 方法組,用戶端可用來以非同步方式叫用作業。

注意

若服務作業同時有同步版與非同步版,則服務的預設行為是叫用同步版。

適用於