国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

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

2020-01-24 00:43:55
字體:
供稿:網(wǎng)友

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

 IObservable / IObserver 接口在.NET Framework 4.0基類庫中可用,并且它們包含在可以安裝在.NET 3.5,Silverlight 3和4以及JavaScript中的包中。

IObservable/IObserver

  Rx將異步和基于事件的數(shù)據(jù)源公開為基于推送的可觀察序列,由.NET Framework 4.0中的新IObservable 接口抽象。 這個IObservable 接口是用于基于拉的,可枚舉集合的熟悉的IEnumerable 接口的雙重。 它表示可以觀察到的數(shù)據(jù)源,這意味著它可以向任何有興趣的人發(fā)送數(shù)據(jù)。 它維護一個代表這種感興趣的監(jiān)聽器的依賴IObserver 實現(xiàn)的列表,并且自動地通知它們?nèi)魏螤顟B(tài)變化。

  IObservable 接口的實現(xiàn)可以被視為類型T的元素的集合。因此,IObservable 可以被視為整數(shù)的集合,其中整數(shù)將被推送到訂閱的觀察者

  如“什么是Rx”中所述,推送模型的另一半由IObserver 接口表示,它表示通過訂閱注冊興趣的觀察者。 隨后將項目從其訂閱的可觀察序列遞送給觀察者。

  為了從observable集合接收通知,您使用IObservable的Subscribe方法為其傳遞IObserver 對象。 作為對此觀察者的回報,Subscribe方法返回一個IDisposable對象,作為訂閱的句柄。 這允許您在完成后清理訂閱。 在此對象上調(diào)用Dispose將觀察者從源分離,以便不再傳遞通知。 正如你可以推斷,在Rx中,不需要像.NET事件模型中那樣顯式取消訂閱事件。

  觀察者支持三個發(fā)布事件,由接口的方法反映。 當(dāng)可觀察的數(shù)據(jù)源具有可用的數(shù)據(jù)時,OnNext可以被調(diào)用零次或更多次。 例如,用于鼠標(biāo)移動事件的可觀察數(shù)據(jù)源可以在每次鼠標(biāo)移動時發(fā)出一個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擴展方法,以便您可以自己避免實現(xiàn)IObserver 接口。 對于可觀察序列的每個發(fā)布事件(OnNext,OnError,OnCompleted),可以指定將調(diào)用的委托,如下面的示例所示。 如果不為事件指定操作,則將發(fā)生默認(rèn)行為。

IObservable<int> source = Observable.Range(1, 5); //creates an observable sequence of 5 integers, starting from 1IDisposable 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"));

  您可以將可觀察序列(例如鼠標(biāo)懸停事件的序列)看作是正常集合。 因此,您可以在集合上編寫LINQ查詢以執(zhí)行過濾,分組,合成等操作。為了使可觀察序列更有用,Rx程序集提供了許多工廠LINQ運算符,因此您不需要自己實現(xiàn)任何這些 。 這將在使用LINQ運算符的查詢可觀察序列主題。  

警告:

您不需要自己實現(xiàn)IObservable / IObserver 接口。 Rx為您提供這些接口的內(nèi)部實現(xiàn),并通過Observable和Observer類型提供的各種擴展方法暴露它們。 有關(guān)詳細信息,請參閱創(chuàng)建和查詢可觀察序列主題

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 尖扎县| 双辽市| 吴堡县| 图片| 义马市| 牙克石市| 息烽县| 吉木乃县| 婺源县| 佛冈县| 平乡县| 丁青县| 裕民县| 甘德县| 黎平县| 峨眉山市| 灵山县| 双辽市| 洱源县| 虞城县| 朝阳市| 合作市| 翁源县| 阳高县| 武胜县| 梅河口市| 彭水| 长沙市| 桑日县| 塔城市| 西乌珠穆沁旗| 罗源县| 清远市| 安乡县| 武陟县| 峡江县| 磐石市| 托里县| 钟山县| 刚察县| 唐山市|