2011-07-31 65 views
3

是否可以使用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擴展模擬?

回答

1

也許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例子。

3

System.Threading,TPL的程序集曾經被包含在Rx版本中,但不再是。

您可以在舊版本中找到它。

這就是說,一個IObservable<T>類似於與一個Task<T>只能有1個結果的關鍵區別一個Task<T>,一個IObservable<T>是0以上的結果的流。

1

.NET 3.5中的Rx不能使用任務,它使用.NET 3.5線程池 - 但是,正如Scott所說,IObservable的工作方式與Task相似,當IObservable是一個項目時。

1

如果我在哪裏錯了,請糾正我。

觀察者和觀察者主要與任務有關 - 觀察(等待數據)&訂閱(觀察者獲取被推送的數據)。

Observable提供了兩個運算符來改善上述兩個任務的性能。

1)。 Observable.ObserveOn - 異步通知指定schedular上的觀察者。 任務可以更好地使用程序器的地方或者取

  • Scheduler.CurrentThread的參數來進行(請遵守當前正在運行的線程)
  • Scheduler.NewThread(請遵守新線程每次)
  • 調度.TaskPool(注意使用TaskPool機制,我想你可能會感興趣。)
  • Scheduler.ThreadPool(注意使用線程池機制)

相同去第二次....

2)。 Observable.SubscribeOn - 異步訂閱 - 取消訂閱指定調度程序的觀察者。

它也有與上述相同的選項來安排訂閱。

因此,Rx提供內置的功能來安排您的過程以提供快速結果。

4

據我所知,無擴展的最後一個版本包括「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。 )

+1

查看http://www.microsoft.com/en-us/download/details.aspx?id=28568獲取更高版本的Rx SDK。鏈接從Rx下載頁面http://msdn.microsoft.com/en-us/data/gg577610 –

+1

不再在microsoft.com上下載:( –

5

就像這裏提到的一樣,你可以在舊的Rx安裝中找到backported System.Threading.dll

爲了更容易的整合,我製作了一個nuget(名爲TaskParallelLibrary)。

你可以從http://nuget.org/packages/TaskParallelLibrary得到它。