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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

Reactive Extensions for .NET (Rx)

發布時間:2025/3/20 asp.net 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Reactive Extensions for .NET (Rx) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LINQ to Object使用IEnumerable和IEnumerator兩個接口來迭代數據集。枚舉器的MoveNext()方法用于從前一個元素枚舉到下一個元素,而Current屬性則用于檢索個別的元素。這種機制采取廣泛使用的簡潔易懂的"拉(pull)"過程。與之還有一種對應的"推"模式:一個是可以從集合中提取數據,同時可以把數據推進同樣的集合。

理論上來說,IEnumerable接口可對集合添加對象,但是由于它的阻塞性所以不能在異步操作中進行。.Net 4.0中引入了兩個新的接口:IObservable和IObserver。人們可以把IObserver賦給數據集并把它作為IObservable訂閱。當一項新的數據可用時,就可以通過傳遞IObservable來把它壓進集合,接著再傳給Iobserver。如下是一個簡單的示例:

????class Program
????{
????????public static void Main()
????????{
????????????new NumbersObservable(new[] { 2, 3, 4 }).Subscribe(new DebugObserver());
????????}
????}

????internal class AnonymousDisposable : IDisposable
????{
????????internal Action Action { get; set; }
????????void IDisposable.Dispose()
????????{
????????????this.Action();
????????}
????}

????class NumbersObservable : IObservable<int>
????{
????????public NumbersObservable(IEnumerable<int> numbers)
????????{
????????????this._numbers = numbers;
????????}

????????private IEnumerable<int> _numbers;
????????public IDisposable Subscribe(IObserver<int> observer)
????????{
????????????foreach (int number in _numbers)
????????????{
????????????????observer.OnNext(number);
????????????}
????????????observer.OnCompleted();
????????????return new AnonymousDisposable { Action = () => { ; } };
????????}
????}

????class DebugObserver : IObserver<int>
????{
????????public void OnNext(int value) { Console.WriteLine("{0}", value); }
????????public void OnCompleted() { Console.WriteLine("all done."); }
????????public void OnError(Exception ex) { Console.WriteLine("Whoops exception, I'd better throw."); throw ex; }
????}

這種方法在處理事件的時候有著極大的優勢。我們可以把IObserver附加到鼠標事件并對這些事件異步記錄到一個集合當中。接著就可以使用LINQ來迭代數據,并進行相應的處理。要說明它在處理GUI事件的威力。上面只是一個簡單的示例,Reactive Extensions實現了更多更為強大的功能,.net 3.5和.net 4.0 (最終會作為.net 4.0的一部分隨VisualStudio2010一起發布)的Beta版可以在DevLabs: Reactive Extensions for .NET (Rx)下載。

另外,關于Reactive Extensions的示例,可以參看以下這個網頁:
.NET 的 Reactive Extension (Rx)

關于觀察者模式的介紹,可以參看這兩篇文章:
Observer(觀察器)
探究觀察者設計模式

總結

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

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