是否可以使用Reactive Extensions(Rx)在.NET 3.5中創建執行並行化的應用程序,還是以某種方式受到限制?我從這裏下載了Rx http://www.microsoft.com/download/en/confirmation.aspx?id=26649,並在創建了一個帶有被引用反應程序集的簡單項目後,我未能找到與.NET 4.0中的任務相對應的任何類。我試圖找到'任務'類,但唉,我找不到任何。難道我做錯了什麼?Threading.Tasks .NET 3.5中的Rx擴展模擬?
回答
也許samples from the rx wiki可以幫助你。
最簡單的後臺任務是:
var o = Observable.Start
(
() =>
{
Console.WriteLine("Calculating...");
Thread.Sleep(3000);
Console.WriteLine("Done.");
}
);
o.First(); // subscribe and wait for completion of background operation
但是你可能也想看看forkjoin例子。
System.Threading,TPL的程序集曾經被包含在Rx版本中,但不再是。
您可以在舊版本中找到它。
這就是說,一個IObservable<T>
類似於與一個Task<T>
只能有1個結果的關鍵區別一個Task<T>
,一個IObservable<T>
是0以上的結果的流。
.NET 3.5中的Rx不能使用任務,它使用.NET 3.5線程池 - 但是,正如Scott所說,IObservable的工作方式與Task相似,當IObservable是一個項目時。
如果我在哪裏錯了,請糾正我。
觀察者和觀察者主要與任務有關 - 觀察(等待數據)&訂閱(觀察者獲取被推送的數據)。
Observable提供了兩個運算符來改善上述兩個任務的性能。
1)。 Observable.ObserveOn - 異步通知指定schedular上的觀察者。 任務可以更好地使用程序器的地方或者取
- Scheduler.CurrentThread的參數來進行(請遵守當前正在運行的線程)
- Scheduler.NewThread(請遵守新線程每次)
- 調度.TaskPool(注意使用TaskPool機制,我想你可能會感興趣。)
- Scheduler.ThreadPool(注意使用線程池機制)
相同去第二次....
2)。 Observable.SubscribeOn - 異步訂閱 - 取消訂閱指定調度程序的觀察者。
它也有與上述相同的選項來安排訂閱。
因此,Rx提供內置的功能來安排您的過程以提供快速結果。
據我所知,無擴展的最後一個版本包括「the back ported standalone DLL named System.Threading.dll」是Reactive Extensions (Rx) v1.0.2856.0發佈的2011年2月11日(以Rx_Net35.msi)。
(我實際上已經將它作爲Rx_Net35.v1.0.2856.0.msi,在5月份下載,我認爲從CodePlex中;無法再找到它......它在我的64位系統上安裝爲C:\Program Files (x86)\Microsoft Cloud Programmability\Reactive Extensions\v1.0.2856.0\Net35\System.Threading.dll
。 )
就像這裏提到的一樣,你可以在舊的Rx
安裝中找到backported System.Threading.dll
。
爲了更容易的整合,我製作了一個nuget(名爲TaskParallelLibrary)。
- 1. Rx Amb擴展
- 2. 替代Rx(Reactive Extensions).net 3.5
- 3. .net 3.5中的Rx不是異步?
- 4. 在.NET 3.5委託中模擬差異
- 5. 使用RX擴展的LINQ
- 6. Rx擴展Parallel.ForEach節流
- 7. 無功擴展(Rx)+ MVVM =?
- 8. Windows Phone中的無功擴展(Rx)Mango
- 9. 如何正確地模擬.NET 3.5
- 10. Silverlight ObservableCollection v。對於.NET(Rx)的反應式擴展
- 11. NSubstitute模擬擴展方法
- 12. 模擬JavaScript擴展函數
- 13. 擴展iPhone模擬器?
- 14. 無功擴展(Rx)未命中事件
- 15. XPath擴展方法未能在.net 3.5,工作在.NET 4.0
- 16. Parallel.ForEach從無效擴展中缺少.Net 3.5
- 17. 完全(桌面).NET 3.5中的IsolatedStorageSettings的模擬
- 18. 用於xbox360的.net compact/xna3.1中的Rx擴展/並行任務庫?
- 19. ASP.NET或C#的C#擴展方法(.Net 3.5)
- 20. C#.Net 3.5代碼替換使用LINQ的文件擴展名
- 21. .NET 2.0中的Ajax擴展?
- 22. Chrome擴展tabs.on更新Firefox的模擬
- 23. 擴展.NET RoleProvider
- 24. Node.js的擴展.NET
- 25. 反應性擴展(Rx)和異步類
- 26. 寫一個Rx「RetryAfter」擴展方法
- 27. 的Rx Task.Factory.StartNew上的.Net 3.5問題開始兩個任務
- 28. 構建Python 3.5的擴展程序或C擴展的2.7
- 29. 瞭解使用Rx擴展,但在這是什麼PUSH模型?
- 30. 轉換項目.net 2.0到3.5,擴展方法在哪裏?
查看http://www.microsoft.com/en-us/download/details.aspx?id=28568獲取更高版本的Rx SDK。鏈接從Rx下載頁面http://msdn.microsoft.com/en-us/data/gg577610 –
不再在microsoft.com上下載:( –