日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Reactive Extensions 相见恨晚的Rx.Net

發布時間:2023/12/4 asp.net 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Reactive Extensions 相见恨晚的Rx.Net 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

何為Reactive Extensions(Rx)

Rx是一個遵循函數式編程的類庫,它引用觀察者以及迭代器設計模式對可觀察對象產生的數據進行異步消費。使用Rx,開發人員將使用LINQ運算符操作異步數據流,并使用調度程序參數化異步數據流中的并發性,簡單地說,Rx = Observables + LINQ + Schedulers。

使用Rx需要Nuget安裝System.Reactive Nuget包

Rx的使用場景

響應式UI

UI界面上,用戶對一個綁定數據集合的控件進行關鍵字查詢。常規的流程是我們必須在等待用戶鍵盤按下指定的完成鍵(如回車)或鼠標點擊查詢按鈕后程序才開始執行相應的查詢處理。但假設需求變更:“用戶希望在每輸入一個關鍵字后就能及時將關鍵字相應的查詢結果集綁定到控件” 如果面臨這個需求,那你會如何實現呢? 你會少不了定義相應的全局狀態字段,少不了相應的時間間隔刷新。我相信寫出來的代碼也會讓你很煩惱。 其實你有更好的選擇,那就是我們的主角Rx。

Rx 核心

Rx有兩個核心接口 IObservable<T>、IObserver<T>

IObservable<T>

先來看此接口的結構:

IObservable<T>接口就提供一個Subscribe(訂閱)方法,入參是一個觀察者對象接口
我們可以將IObservable<T>稱之為被觀察者(可觀察者),IObserver<T>稱之為觀察者

通過可接口簽名可以看出被觀察者需要輸出T類型的對象。需要理解被觀察者IObservable<T>我們需要與現有的一些常規知識點做出比較,這里我們用IEnumerable<T>比較。
我想我們都使用過Linq,操作過IEnumerable<T>集合,IEnumerable<T>集合有個明顯的狀態就是它所存儲的元素是靜態的。集合內的元素狀態除非代碼顯示的新增或刪除、修改,否則這個集合基本是靜態(數據未變動)的。但是IObservable<T>則不同,它的元素是根據被觀察者提供的數據而變動的(不可預測的),就好比在UI上你無法預測用戶的操作行為一樣。

下面這個表格可以看出兩者區別

IEnumerable

可方便的列舉集合元素值

IObservable

可觀察對象變動的值

IObserver<T>

IObserver<T>接口可以理解為消費被貫徹著提供數據的一個接口,它的三個方法決定了本次數據流的觀察行為的走向。
通俗理解就是被觀察者生成數據,觀察者消費數據。

來看下IObserver<T>的結構

?

  • OnNext 表示消費新數據

  • OnError 表示觀察數據流出現異常

  • OnCompleted 表示明確關閉觀察數據流

代碼示例

下面代碼定義了一個可觀察的隊列,該隊列會提供給觀察者三個int類型的入參 1、2、3 供觀察者對象的OnNext方法消費。 MyConsoleObserver(觀察者)在得到數據后打印出來。

通過示例代碼我們得知了Rx.Net的數據流訂閱、消費流程。

Subject<T>

我們再來認識下Subject<T>,Subject是一個IObservable,它以命令形式生成一個值,并將該值推送給觀察者對象。我們看下Subject<T>的結構。

?

看這繼承關系,我們繼續看SubjectBase<T>里面有些啥~

哎呀,這個類真不得了啊,把IObserver<T>和IObservable<T>都給繼承了。這不是可以自己提供數據自己進行訂閱和消費了么....
我們來看看Subject<T>是怎么玩的:

執行結果如下圖:

需要注意的是訂閱方法需要在數據生成前聲明。

總結

好啦,要睡覺啦,基本上Rx核心的幾個點就先講到這,我們也來總結下Rx.Net的幾個核心知識點:

  • 可觀察(被觀察)對象生產數據;

  • 觀察者總是被動接收數據;

  • 需要明確訂閱后觀察者才得以消費數據;

這里也只是自己的一個學習總結,Rx也不是眼前的幾個小示例就可以一目了然,不過核心的知識基本上就是這些。至于還有一些操作符的話相信用過Linq的話上手不難,難點在于需要在實際業務中找到合適的場景使用,只有不斷使用才會融會貫通。但是任何技術都不能濫用,每一項新技術都有它最佳使用場景,優秀的開發者需要做好權衡。

原文地址:https://www.cnblogs.com/hunanzp/p/10325454.html

.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com


總結

以上是生活随笔為你收集整理的Reactive Extensions 相见恨晚的Rx.Net的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人在线观看亚洲 | 漂亮人妻被黑人久久精品 | 啪啪综合网 | 久久久欧美精品sm网站 | 国产精品成人久久久 | 黑人性视频 | 99精品欧美| 日韩在线无 | 四川丰满少妇被弄到高潮 | 免费在线观看你懂的 | 撸撸在线视频 | 青草青在线视频 | 橹图极品美女无圣光 | 黄色在线观看国产 | 免费aa视频| 天天摸天天碰 | 噜噜色av| 天天干天天添 | 日韩精品偷拍 | 玩偶姐姐在线观看免费 | 一区二区三区激情 | 中文在线观看高清视频 | 欧美少妇网 | 国产区精品区 | 色多多黄色 | 蜜臀精品 | 亚洲九九夜夜 | 黄色片网站在线免费观看 | 色综合久久88色综合天天免费 | 成人无码一区二区三区 | 舐丝袜脚视频丨vk | 国产婷婷色一区二区 | 免费看黄色的网站 | 原神淫辱系列同人h | 波多野结衣先锋影音 | 色涩色| 91九色蝌蚪91por成人 | 激情久久网 | 特级西西444www高清大视频 | 亚洲熟女乱色一区二区三区 | 色一情一乱一伦一区二区三区 | 91字幕网 | 粗暴video蹂躏hd | 成人h动漫精品一区 | 91麻豆精品一区二区三区 | 高清av网址| 成人免费网站黄 | 亚洲男人的天堂网 | 骚视频在线观看 | 你懂的在线观看网站 | 欧美日韩黄色 | 国产高清一区 | 曰本三级日本三级日本三级 | 嫩草视频91 | 久久免费高清视频 | 久久久久999 | 日本xxxx18| 日韩毛片高清在线播放 | 国产伦理精品 | 国产在线黄 | 91在线观看免费视频 | 中国videosex高潮hd | 好吊在线视频 | 狠狠操天天操 | 最新福利在线 | 国产精品98 | 色婷婷国产精品综合在线观看 | 一级肉体全黄裸片中国 | 日日摸日日添日日躁av | 人妻少妇精品无码专区二区 | 男女在线观看视频 | 黄色高清网站 | 国产一区在线看 | 色亭亭| 日本一二三区视频 | 一级黄色在线视频 | 第四色在线视频 | 国内自拍一区 | 一级片在线视频 | 国产精品福利在线观看 | 青草青在线视频 | 日韩久久影院 | 日韩成人在线观看视频 | 黄色片免费观看视频 | 极品色av | 中国一级大黄大黄大色毛片 | 国产美女一区 | 逼特逼在线视频 | 69久久精品无码一区二区 | 日韩有码中文字幕在线 | av片网址 | 国产a黄 | 中文字幕色 | 亚洲 小说 欧美 激情 另类 | 在线黄色免费 | 无码毛片aaa在线 | 亚洲理论在线观看 | 国产成人一区二区在线 | 国产精品一区二区三区久久久 |