函數(shù)響應式編程是一個來自90年代后期受微軟的一名計算機科學家Erik Meijer啟發(fā)的思想,用來設計和開發(fā)微軟的Rx庫。
Rx 是微軟.NET的一個響應式擴展。Rx借助可觀測的序列提供一種簡單的方式來創(chuàng)建異步的,基于事件驅(qū)動的程序。開發(fā)者可以使用Observables模擬異步數(shù)據(jù)流,使用LINQ語法查詢Observables,并且很容易管理調(diào)度器的并發(fā)。
Rx讓眾所周知的概念變得易于實現(xiàn)和消費,例如push方法。在響應式的世界里,我們不能假裝作用戶不關(guān)注或者是不抱怨它而一味的等待函數(shù)的返回結(jié)果,網(wǎng)絡調(diào)用,或者數(shù)據(jù)庫查詢的返回結(jié)果。我們時刻都在等待某些東西,這就讓我們失去了并行處理其他事情的機會,提供更好的用戶體驗,讓我們的軟件免受順序鏈的影響,而阻塞編程。
下表列出的與.NET 枚舉相關(guān)的.NET Observable
| .NET Observable | 一個返回值 | 多個返回值 |
|---|---|---|
| Pull/Synchronous/Interactive | T |
IEnumerable<T> |
| Push/Asynchronous/Reactive | Task<T> |
IObservable<T> |
push方法把這個問題逆轉(zhuǎn)了:取而代之的是不再等待結(jié)果,開發(fā)者只是簡單的請求結(jié)果,而當它返回時得到一個通知即可。開發(fā)者對即將發(fā)生的事件提供一個清晰的響應鏈。對于每一個事件,開發(fā)者都作出相應的響應;例如,用戶被要求登錄的時候,提交一個攜帶他的用戶名和密碼的表單。應用程序執(zhí)行登錄的網(wǎng)絡請求,接下來將要發(fā)生的情況有:
正如你用push方法所看到的,開發(fā)者不需要等待結(jié)果。而是在結(jié)果返回時通知他。在這期間,他可以做他想做的任何事情: