Reactive Extensions

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

相關文章
相關標籤/搜索