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