共用方式為


決定何時實作事件架構非同步模式

更新:2007 年 11 月

事件架構非同步模式提供了一個模式來公開類別的非同步行為。在引入這個模式之後,.NET Framework 定義了兩個模式來公開非同步行為:以 System.IAsyncResult 介面為根據的非同步模式,以及事件架構的模式。這個主題將描述實作這兩個模式的適當時機。

如需使用 IAsyncResult 介面進行非同步程式設計的詳細資訊,請參閱非同步程式設計模式

一般原則

一般來說,您應該盡量使用事件架構非同步模式來公開非同步功能。但是,此事件架構模式無法滿足一些要求;在這些情況下,您可能需要在此事件架構模式之外也實作 IAsyncResult 模式。

注意事項:

實作 IAsyncResult 模式而沒有同時實作此事件架構模式的情況,是相當罕見的。

方針

下列清單描述當您應該實作事件架構非同步模式時所適用的方針:

  • 將此事件架構模式當做預設 API 使用,以公開類別的非同步行為。

  • 當您的類別主要用於用戶端應用程式中 (例如 Windows Form) 時,不要公開 IAsyncResult 模式。

  • 當必須滿足您的需求時,只要公開 IAsyncResult 模式。例如,與現有 API 之間的相容性可能會要求您公開 IAsyncResult 模式。

  • 如果沒有公開此事件架構模式,也不能公開 IAsyncResult 模式。

  • 如果您必須公開 IAsyncResult 模式,請以進階選項的方式來處理。例如,如果您要產生 Proxy 物件,則預設會產生此事件架構模式,並附帶一個可產生 IAsyncResult 模式的選項。

  • IAsyncResult 模式實作上建置您的事件架構模式實作。

  • 避免在相同類別上同時公開此事件架構模式和 IAsyncResult 模式。在較高層級的類別上公開此事件架構模式,並在較低層次的類別上公開 IAsyncResult 模式。例如,將 WebClient 元件上的事件架構模式與 HttpRequest 類別上的 IAsyncResult 模式相比較。

    • 當相容性需要時,在相同類別上公開此事件架構模式和 IAsyncResult 模式。例如,如果您已經發行使用 IAsyncResult 模式的 API,您將需要保留 IAsyncResult 模式,以提供回溯相容性 (Backward Compatibility)。

    • 如果產生的物件模型複雜度帶來的好處更勝於分隔實作的好處,則可在相同類別上公開此事件架構模式和 IAsyncResult 模式。在單一類別上公開兩個模式的作法,要比避免公開此事件架構模式更理想。

    • 如果您必須在單一類別上同時公開此事件架構模式和 IAsyncResult 模式,請使用設定為 AdvancedEditorBrowsableAttribute,以將 IAsyncResult 模式實作標記為進階功能。如此可向設計環境 (例如 Visual Studio IntelliSense) 指示,不要顯示 IAsyncResult 屬性和方法。這些屬性和方法仍然有完整的可用性,但是透過 IntelliSense 工作的開發人員會對此 API 有更清楚的概念。

在事件架構模式之外也公開 IAsyncResult 模式的準則

雖然在之前提到的案例之下,事件架構非同步模式有許多優點,但是它也有一些缺點,而當效能是您最大的需求時,應該要特別留意這些缺點。

此事件架構模式及 IAsyncResult 模式未處理到三種情況:

您可以使用此事件架構模式來處理這些情況,但是這樣做要比使用 IAsyncResult 模式更為麻煩。

開發人員經常會針對一般有極高效能需求的服務使用 IAsyncResult 模式。例如,輪詢完成案例就是一項高效能伺服器的技術。

此外,此事件架構模式的效率要比 IAsyncResult 模式差,因為它會建立更多的物件,尤其是 EventArgs,而且它也會跨處理序同步處理。

下列清單將顯示在您決定要使用 IAsyncResult 模式之後所應該遵循的一些建議:

  • 當您特別需要 WaitHandleIAsyncResult 物件的支援時,只要公開 IAsyncResult 模式。

  • 當您有使用 IAsyncResult 模式的現有 API 時,只要公開 IAsyncResult 模式。

  • 如果現有的 API 是以 IAsyncResult 模式為根據,請考慮在下一版中公開事件架構模式。

  • 如果您有極高的效能需求,而您驗證過此事件架構模式不能滿足這項需求,但是 IAsyncResult 模式卻可以時,只要公開 IAsyncResult 模式。

請參閱

工作

逐步解說:實作支援事件架構非同步模式的元件

概念

實作事件架構非同步模式

實作事件架構非同步模式的最佳作法

事件架構非同步模式概觀

其他資源

非同步程式設計模式

使用事件架構非同步模式設計多執行緒程式