Rx提供了一种新的组织和协调异步事件的方式,极大的简化了代码的编写。Rx最显著的特性是使用可观察集合(Observable Collection)来达到集成异步(composing asynchronous)和基于事件(event-based)的编程的效果。编程
个人理解是它是一种编程模式的抽象,http://latentflip.com/imperative-vs-declarative/,协同Linq的思想能够很好的工做,使代码更为整洁。异步
Obervable Collection是Rx的核心,你甚至能够把事件当作是一种流。它实现了Observer模式的一种变种async
在Rx中,IObservable至关于经典模式中的Subject,IObserver至关于Observerspa
经过使用Rx既可以控制Observable的线程控制,也可以控制Observer的callback的线程控制线程
static void Main(string[] args) { Console.WriteLine("Start: Thread #" +Thread.CurrentThread.ManagedThreadId); var query = from number in Enumerable.Range(1, 5) select StringWait(number.ToString()); //耗时操做让Observable在Worker线程中完成
var observableQuery = query.ToObservable(ThreadPoolScheduler.Instance);
//指定Observer在UI线程中更新UI
observableQuery.ObserveOn(Scheduler.Dispatcher).Subscribe(ProcessNumber); } private static string StringWait(string str) { Thread.Sleep(500); return str; } private static void ProcessNumber(string number) { Console.WriteLine("{0} Thread {1}", number, Thread.CurrentThread.ManagedThreadId); }
上述代码只是个实例,然而能够被运用到GUI APP中,好比后台操做或者耗时操做能够经过Worker线程完成,更新UI的操做直接让Observer在UI Thread中完成,编程模式获得简化。code