Threading.Tasks在.NET 3.5中的Rx扩展模拟?

是否可以使用Reactive Extensions(Rx)在.NET 3.5中创建执行并行化的应用程序,还是以某种方式限制? 我从http://www.microsoft.com/download/en/confirmation.aspx?id=26649下载了Rx,在创建了一个带引用的反应式程序集的简单项目之后,我找不到与.NET 4.0中的任务相对应的任何类。 我正在尝试为“任务”找到课程,但唉,我找不到任何课程。 难道我做错了什么?

也许来自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示例。

正如这里提到的,你可以在旧的Rx安装中找到一个反向移植的System.Threading.dll

为了更容易集成,我已经制作了一个nuget(称为TaskParallelLibrary )。

您可以从http://nuget.org/packages/TaskParallelLibrary获取它。

据我所知,最新版本的Reactive Extensions包含“ 后端移植的独立DLL名为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;再也找不到了…它安装为C:\Program Files (x86)\Microsoft Cloud Programmability\Reactive Extensions\v1.0.2856.0\Net35\System.Threading.dll我的64位系统上的C:\Program Files (x86)\Microsoft Cloud Programmability\Reactive Extensions\v1.0.2856.0\Net35\System.Threading.dll 。)

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

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

也就是说, IObservable类似于Task ,其关键区别在于Task只能有1个结果, IObservable是0或更多结果的流。

.NET 3.5中的Rx不能使用任务,它使用.NET 3.5线程池 – 但是,正如Scott所说,当IObservable是一个项目长时,IObservable就像Task一样工作。

如果我错了,请纠正我。

Observable和观察者主要与任务有关 – 观察(等待数据)和订阅(观察者获取被推送的数据)。

Observable提供了两个运算符来提高上述两个任务的性能。

1)。 Observable.ObserveOn – 在指定的调度程序上异步通知观察者。 可以使用Schedular以更好的方式执行任务,其中它包含任一参数

  • Scheduler.CurrentThread(观察当前运行的线程)
  • Scheduler.NewThread(每次在新线程上观察)
  • Scheduler.TaskPool(观察使用TaskPool机制,我想你可能会感兴趣。)
  • Scheduler.ThreadPool(观察使用ThreadPool机制)

同样适用于第二……

2)。 Observable.SubscribeOn – 异步订阅 – 取消订阅指定调度程序上的观察者。

它还具有与上述相同的选项来安排订阅。

因此,Rx提供内置function来安排您的流程以提供快速结果。