反應擴充功能

回應式延伸模組 (Rx) 是一個程式庫,可使用可觀察序列和 LINQ 樣式查詢運算子來撰寫非同步和事件型程式。

資料序列可以採用許多形式,例如來自檔案或 Web 服務的資料流程、Web 服務要求、系統通知,或一系列事件,例如使用者輸入。

回應式延伸模組會將所有資料序清單示為可觀察的序列。 應用程式可以訂閱這些可觀察的序列,以在新資料送達時接收非同步通知。 Rx 程式庫可用於 .NET 中的傳統型應用程式開發。 它也會針對 Silverlight 發行,Windows Phone 7 和 JavaScript。 如需這些不同平臺的詳細資訊,請參閱 Rx 版本之間的差異 主題。

提取與推送資料

在互動式程式設計中,應用程式會主動輪詢資料來源以取得詳細資訊,方法是從代表來源的序列提取資料。 這類行為是由 IEnumerable < T > /IEnumerator T > 的反覆運算器 < 模式表示。 IEnumerable < T > 介面會公開單一方法 GetEnumerator () ,這個方法會傳回 IEnumerator < T > 來逐一查看這個集合。  IEnumerator < T > 可讓我們藉由傳回 Current 屬性) 來取得目前專案 (,並藉由呼叫 MoveNext 方法) 來判斷是否有更多專案可逐一查看 (。 

應用程式在資料擷取程式中處於作用中狀態:除了藉由呼叫 GetEnumerator 取得列舉值之外,它也會藉由呼叫 MoveNext 來控制擷取的步調。 這個列舉模式是同步的,這表示在輪詢資料來源時,可能會封鎖應用程式。 這類提取模式類似于流覽您的文件庫並簽出書籍。 完成書籍之後,請支付另一個造訪來簽出另一個。

另一方面,在回應式程式設計中,應用程式會訂閱資料流程, (Rx) 中稱為可觀察序列的資料流程,並從來源傳送任何更新來提供更多資訊。 應用程式在資料擷取程式中是被動的:除了訂閱可觀察的來源之外,它不會主動輪詢來源,而是只回應推送至該來源的資料。 當資料流程沒有更多要提供的資料,或當它發生問題時,來源會傳送通知給訂閱者。 如此一來,應用程式將不會遭到封鎖,方法是等候來源更新。

這是回應式延伸模組所採用的推送模式。 類似于加入書籍俱樂部,您在特定內容類型中註冊您的興趣,且符合您興趣的書籍會在發佈時自動傳送給您。 您不需要就地取得所需的專案。 在許多案例中,採用推送模式很有説明,特別是在 UI 執行緒無法封鎖的 UI 大量環境中,應用程式正在等候某些事件。 這也適用于程式設計環境,例如 Silverlight,其本身具有一組非同步需求。 總而言之,您可以使用 Rx,讓您的應用程式更具回應性。

Rx 所實作的推送模型是以 IObservable < T/IObserver < T >> 的可觀察模式表示。 IObservable < T > 介面是熟悉的 IEnumerable < T > 介面的雙重。 它會抽象化資料序列,並保留對資料序列感興趣的 IObserver < T > 實作清單。 IObservable 會自動通知所有觀察者任何狀態變更。 若要透過訂用帳戶註冊興趣,您可以使用 IObservable 的 Subscribe 方法,它會接受 IObserver 並傳回 IDisposable。 這可讓您追蹤和處置訂用帳戶。 此外,Rx 的 LINQ 實作可讓開發人員透過推送式序列撰寫複雜的事件處理查詢,例如 .NET 事件、APM 型 (「IAsyncResult」) 計算、工作 < T > 型計算、Windows 7 感應器和位置 API、SQL StreamInsight 時態事件資料流程、F# 第一類別事件和非同步工作流程。 如需 IObservable < T > /IObserver < T > 介面的詳細資訊,請參閱 探索 Rx 的主要介面。 如需在 Rx 中使用不同功能的教學課程,請參閱 使用 Rx