zoukankan      html  css  js  c++  java
  • 初识响应式,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 的确非常象,区别仅仅是 它和实时性有关吧。目前我暂时就是这么理解的。如果你觉得不对欢迎留言讨论!

  • 相关阅读:
    toolblock 编写脚本并运用。
    C#等待子线程执行完毕
    win10+python3.7+dlib+opencv+face_recognition实现人脸识别
    c# tcp/ip通信
    【微信Xposed】kotlin反射异常RuntimeException:looper or serial is null
    安卓APK开启调试
    常用汇编指令对标志位的影响
    简单的.net反调试,调试检测
    虚拟机VMware和win10 hyper-v不兼容的问题
    对某城APP抓包分析--过SSL证书校验
  • 原文地址:https://www.cnblogs.com/ProjectDD/p/11706619.html
Copyright © 2011-2022 走看看