标签:有关 ade art reading 封装 扩展 route async 区分
贴一下代码:
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 的确非常象,区别仅仅是 它和实时性有关吧。目前我暂时就是这么理解的。如果你觉得不对欢迎留言讨论!
标签:有关 ade art reading 封装 扩展 route async 区分
原文地址:https://www.cnblogs.com/ProjectDD/p/11706619.html