什麼是.Net Rx框架我已經閱讀了一些文章,但概念仍然不清楚。任何人都可以用一個實際的例子來解釋它。.Net中的Rx框架是什麼?
回答
讓我們想象下面的情景:經過漫長的一天,你和你的朋友進入酒吧解渴。所有你想要的是幾個啤酒和一個桌子,在那裏你可以討論各種主題(地圖減少實施,gass價格等)。
在統籌辦法(非處方),你會執行以下步驟:
1. Ask bartender for two beers
2. While bartender pours the beer into the glasses you wait by the bar
3. When bartender gives you the beers you take them and find an available table, sit, drink and discuss
使用的Rx辦法你執行這些步驟:
1. Ask the bartender for two beers
2. Bartender starts pouring your beers and you and your frined find an available table, sit and start discussing on various subjects
3. When bartender finishes pouring your beer, a waitress brings the beer to your table and you start drinking it.
現在上面可以轉化成代碼如下:
//Non Rx approach
var beers = beerKeg.Take(2); // Here you wait for the bartender to pour the beer
foreach(var beer in beers) // Bartender handles you the beer
GrabBeer(beer);
FindAvailableTable(); // You search for an available table
foreach(var beer in beers) // You drink your beer
beer.Drink();
//Rx approach
var beers = beerKeg.Take(2)
.ToObservable()
.Subscribe(beer => beer.Drink());
// Bartender is pouring the beer but meanwhile you can search for an available table.
// The waitress will bring beer to you.
FindAvailableTable();
希望這會有所幫助。
PS:要請參閱區別使用LINQPad;執行非Rx查詢並在結果上調用Dump()
- 結果將顯示在網格中。使用Rx執行相同的查詢並使用x=>x.Dump()
訂閱ObservableCollection
;你會看到每個元素都是單獨打印的。
GR8!謝謝,很好的例子 – Deepesh
Rx或Reactive Extensions是一個庫,它使用可觀察集合和LINQ樣式查詢運算符來組合異步和基於事件的程序。
很多文章都在網上提供如:
和我們自己的SO
的Rx或無擴展名是 「LINQ事件」。 LINQ是基於IEnumerable<T>
,你是通過遍歷它拉的項目從一個序列:
var items = source.Where(x => x.Name == "foobar");
foreach (var item in items)
Console.WriteLine(item);
RX是基於IObservable<T>
,你訂閱事件的序列都推到你倒數:
var events = source.Where(x => x.Name == "foobar");
events.Subscribe(item => Console.WriteLine(item));
在LINQ中,您通過使用foreach
循環和pull項目來控制迭代。在Rx中,有些事情會引發事件,在準備好時會將項目推送給您。
Rx爲IObservable<T>
增加了許多擴展方法,就像LINQ在IEnumerable<T>
中增加了很多擴展方法一樣,使您能夠編寫非常緊湊且清晰的代碼來處理異步事件。
感謝馬丁+1解釋它 – Deepesh
- 1. 什麼是.NET架構和什麼是.NET框架?
- 2. 什麼是.NET框架
- 3. .NET的公認portlet框架是什麼?
- 4. .Net框架上的clr.dll是什麼?它有什麼作用?
- 5. 什麼BDD框架在.net中流行?
- 6. .NET微型框架和.NET精簡框架有什麼區別?
- 7. Web爬蟲的Rx框架
- 8. .net框架中的所有內置抽象類是什麼?
- 9. .NET框架中的.PE文件是什麼?
- 10. .NET框架中的RenPrivateItem文件格式是什麼?
- 11. 什麼是.net框架中可用的wss和moss庫
- 12. .NET框架中CLS的用途是什麼?
- 13. 什麼是.NET框架是可用的DotNetOpenAuth?
- 14. Rx for .NET - Scheduler.Dispatcher發生了什麼?
- 15. 爲什麼.NET框架會鎖定dll?
- 16. 什麼.NET框架與Windows XP「發貨」
- 17. 爲什麼.NET是一個框架和Java是一種語言
- 18. 什麼是Spring框架中的CGLIB?
- 19. 什麼是PHP中的框架?
- 20. React.js框架中的Mixin是什麼?
- 21. perl中可用的框架是什麼
- 22. WebSocket框架中的掩碼是什麼?
- 23. 什麼是「優秀」框架?
- 24. 什麼是M2M Mihini框架?
- 25. 什麼是PastryKit框架?
- 26. 什麼是onDrawFrame框架?
- 27. 什麼是全棧框架?
- 28. 什麼是python web框架
- 29. 框架是什麼意思?
- 30. 什麼是執行框架?
這是觀察者模式簡化http://en.wikipedia.org/wiki/Observer_pattern你可以訂閱事件或任何在observablecollection中的更改,這對MVVM模式很有用。 http://haacked.com/archive/2012/04/09/reactive-extensions-sample.aspx。菲爾解釋更好,並與一個實際的例子 – jjchiw