首頁  >  文章  >  後端開發  >  深入理解C#Rx的主要接口

深入理解C#Rx的主要接口

黄舟
黄舟原創
2017-03-16 11:59:322406瀏覽

這篇文章主要介紹了C# Rx的主要介面深入理解的相關資料,需要的朋友可以參考下

##C# Rx的主要介面深入理解

 IObservable / IObserver 介面在.NET Framework 4.0基底

類別庫中可用,並且它們包含在可以安裝在.NET 3.5 ,Silverlight 3和4以及JavaScript中的套件中。

IObservable/IObserver

  Rx將非同步和基於

事件的資料來源公開為基於推送的可觀察序列,由.NET Framework 4.0中的新IObservable 介面抽象。 這個IObservable 介面是用於基於拉的,可枚舉集合的熟悉的IEnumerable 介面的雙重。 它表示可以觀察到的資料來源,這意味著它可以向任何有興趣的人發送資料。 它維護一個代表這種感興趣的監聽器的依賴IObserver 實現的列表,並且自動地通知它們任何狀態變化。

  IObservable 介面的實作可以被視為型別T的元素的集合。因此,IObservable 可以被視為

整數的集合,其中整數將被推送到訂閱的觀察者

  如「什麼是Rx」中所述,推送

模型的另一半由IObserver 介面表示,它表示透過訂閱註冊興趣的觀察者。 隨後將項目從其訂閱的可觀察序列遞送給觀察者。

  為了從observable集合接收通知,您使用IObservable的Subscribe方法為其傳遞IObserver

物件。 作為對此觀察者的回報,Subscribe方法傳回一個IDisposable對象,作為訂閱的句柄。 這允許您在完成後清理訂閱。 在此物件上呼叫Dispose將觀察者從來源分離,以便不再傳遞通知。 正如你可以推斷,在Rx中,不需要像.NET事件模型中那樣明確取消訂閱事件。

  觀察者支援三個發布事件,由介面的方法反映。 當可觀察的資料來源具有可用的資料時,On

Next可以被呼叫零次或更多次。 例如,用於滑鼠移動事件的可觀察資料來源可以在每次滑鼠移動時發出一個Point物件。 其他兩種方法用於指示完成或錯誤。

  下面列出了IObservable / IObserver 介面。   


public interface IObservable<out T> 
{ 
  IDisposable Subscribe(IObserver<T> observer); 
} 
public interface IObserver<in T> 
{ 
  void OnCompleted();// Notifies the observer that the source has finished sending messages.
  void OnError(Exception error); // Notifies the observer about any exception or error.
  void OnNext(T value);     // Pushes the next data value from the source to the observer.
}

  Rx也提供了Subscribe擴充方法,以便您可以自己避免實作IObserver 介面。 對於可觀察序列的每個發布事件(OnNext,OnError,OnCompleted),可以指定將呼叫的委託,如下面的範例所示。 如果不為事件指定操作,則會發生預設

行為


IObservable<int> source = Observable.Range(1, 5); //creates an observable sequence of 5 integers, starting from 1
IDisposable subscription = source.Subscribe(
              x => Console.WriteLine("OnNext: {0}", x), //prints out the value being pushed
              ex => Console.WriteLine("OnError: {0}", ex.Message),
              () => Console.WriteLine("OnCompleted"));

  您可以將可觀察序列(例如滑鼠懸停事件的序列)視為正常集合。 因此,您可以在集合上編寫LINQ

查詢以執行過濾,分組,合成等運算。為了讓可觀察序列更有用,Rx程式集提供了許多工廠LINQ運算子,因此您不需要自己實作任何這些 。 這將在使用LINQ運算子的查詢可觀察序列主題。  

警告:

您不需要自己實作IObservable / IObserver 介面。 Rx為您提供這些介面的內部實現,並透過Observable和Observer類型提供的各種擴充方法暴露它們。 有關詳細信息,請參閱建立和查詢可觀察序列主題

以上是深入理解C#Rx的主要接口的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn