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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Reactive Extensions简介一

發(fā)布時間:2025/3/20 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Reactive Extensions简介一 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在.Net 4.0中引入了兩個新的接口用來實現(xiàn)觀察者模式——IObservable和IObserver。IObservable是數(shù)據(jù)源,IObserver是觀察者,觀察者訂閱數(shù)據(jù)源后,當新的數(shù)據(jù)產(chǎn)生時,將其主動傳給所有的訂閱者(Iobserver)。

觀察者模式比較基礎,因此在這里并不多加介紹,沒有相關基礎的朋友可以參看MSDN的這兩個鏈接。

l?Observer(觀察器)

l?探究觀察者設計模式

這里我用一個簡單的實例介紹一下這個接口的基本用法。

??? class Program

??? {

??????? static void Main(string[] args)

??????? {

??????????? var timerServer = new TimeServer();

??????????? timerServer.Subscribe(new Watch());

?

??????????? System.Threading.Thread.Sleep(-1);

??????? }

??? }

?

??? class TimeServer : IObservable<DateTime>

??? {

??????? public TimeServer()

??????? {

??????????? new System.Threading.Timer(_ => Notify(DateTime.Now), null, 0, 1000);

??????? }

?

??????? void Notify(DateTime time)

??????? {

??????????? foreach (var observer in _observers)

??????????? {

??????????????? observer.OnNext(time);

??????????? }

??????? }

?

??????? #region IObservable<DateTime> 成員

?

??????? List<IObserver<DateTime>> _observers = new List<IObserver<DateTime>>();

?

??????? public IDisposable Subscribe(IObserver<DateTime> observer)

??????? {

??????????? //這里省略了參數(shù)有效性檢查

??????????? _observers.Add(observer);

??????????? return new AnonymousUnSubscriber() { Action = () => _observers.Remove(observer) };

??????? }

?

??????? #endregion

?

??????? #region AnonymousUnSubscriber

?

??????? class AnonymousUnSubscriber : IDisposable

??????? {

??????????? public Action Action { get; set; }

?

??? ??????? void IDisposable.Dispose()

??????????? {

??????????????? this.Action();

??????????? }

??????? }

?

??????? #endregion

??? }

?

??? class Watch : IObserver<DateTime>

??? {

??????? #region IObserver<DateTime> 成員

?

??????? public void OnCompleted() { throw new NotImplementedException(); }

??????? public void OnError(Exception error) { throw new NotImplementedException(); }

?

??????? public void OnNext(DateTime value)

??????? {

??????????? Console.WriteLine(value);

??????? }

?

??????? #endregion

??? }

?

這里定義了兩個簡單的對象:TimeServer是數(shù)據(jù)源,實現(xiàn)了IObservable接口,Watch是觀察者,實現(xiàn)了IObserver接口。當有新數(shù)據(jù)產(chǎn)生時(定時器每秒鐘通知一次),會調(diào)用Watch的OnNext接口,將當前時間在屏幕上打印出來。

像這種“推”的方式一般也被稱作反應式(Reactive),雖然其接口比較簡明,但在.Net 4.0中只有接口的聲明,并沒有其它的相關庫函數(shù)進行支持。因此要實現(xiàn)反應式編程得自己實現(xiàn)所有其它的相關代碼。不過好在微推出了一個名為Reactive Extensions for .NET (Rx)的庫,實現(xiàn)了許多強有力的功能,使得我們能快速構建強大的反應式的程序。像上面的這個例子,用Rx庫可以簡化如下:?

??? static void Main(string[] args)

??? {

??????? var timerServer = Observable.Interval(TimeSpan.FromSeconds(1)).Select(_ => DateTime.Now);

??????? timerServer.Subscribe(i => Console.WriteLine(i));

?

??????? System.Threading.Thread.Sleep(-1);

??? }

?

Rx庫非常強大,由于相關資料不多,目前我也是在學習和摸索中,后面還會寫一些文章陸續(xù)介紹這個庫。

?

轉(zhuǎn)載于:https://www.cnblogs.com/TianFang/archive/2011/05/01/2034083.html

總結

以上是生活随笔為你收集整理的Reactive Extensions简介一的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。