• 初识响应式,Rx.Net


    贴一下代码:

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reactive.Disposables;
    using System.Reactive.Linq;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows;
    
    namespace WpfApp1 {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window {
            public MainWindow() {
                InitializeComponent();
            }
    
            private void Window_Loaded(object sender, RoutedEventArgs e) {
                this.Async();
            }
            void Sync() {
                for (int i = 0; i < 10; i++) {
                    this.tb.Text = i.ToString();
                }
            }
            void Async() {
                var x = from i in AsyncItem2()
                        where i%2==0 select i;
                x.Subscribe(
                    i => this.tb.Text = i.ToString(),
                    i=>this.tb.Text="xxxxx"
                );            
            }
            async IAsyncEnumerable<int> AsyncItem() {
                for (int i = 0; i < 12; i++) {
                    await Task.Delay(1000);
                    yield return i;
                }
            }
            IObservable<int> AsyncItem2() {
                var x = Observable.Create<int>(
                    async o => {
                        await foreach (var item in AsyncItem()) {
                            o.OnNext(item);
                        }
                        o.OnCompleted();
                        return Disposable.Empty;
                    }
                );
                return x;
            }
        }
    }

    首先说一下和定时器的区别

    其实刚接触这个概念的时候是不好区分的,现在我也初学也说不太清楚,不过,定时器,是对一个周期执行的任务进行的封装,强调任务,而Rx强调的是数据,只不过,这是和时间有关的数据,

    感觉和异步流概念重合了,Rx代表的是一个集合,和普通集合的区别在于,它可以用在和时间有关的场合,做实时的东西

    和IEnumerable,IQueryable一样,IObservable也是可Linq的,即它也实现了 Linq那一些扩展方法

    IEnumerable<T>,是个迭代器,来源于迭代器模式,好象数据结构里的 链表一样,

    IQueryable<T> 是一个表达式树,将一系列linq相关的扩展方法,翻译成Expression 以记录这个linq或扩展方法链式调用的关系,linq就是一系列方法调用的链条,记录以后,在根据需要,解释成不同的

    异类表达,比如ToSql就是解释为,t-sql语句,ToOData,就可能解释为,url 的一种地址 等

    而 IObservable<T> 让我们觉得呀,这样也可以linq啊,还真是稀奇了。

    因为它也是一个集合,所以和IEnumerable 的确非常象,区别仅仅是 它和实时性有关吧。目前我暂时就是这么理解的。如果你觉得不对欢迎留言讨论!

  • 相关阅读:
    2016.07.24
    这个月
    PL/SQL: numeric or value error: character to number conversion error
    java下double相乘精度丢失问题
    Oracle中实现find_in_set
    oracle中,改变表名和字段名的大小写
    Unknown entity XXX
    Incorrect column count: expected 1, actual 5
    负数的二进制表示
    【Android】Android单例模式及使用单例模式实现自己的HttpClient工具类
  • 原文地址:https://www.cnblogs.com/ProjectDD/p/11706619.html
Copyright © 2020-2023  润新知