线程..NET 3.5中Rx扩展中的模拟任务

本文关键字:模拟 任务 扩展 Rx 线程 NET | 更新日期: 2023-09-27 18:04:00

是否可以使用Reactive Extensions(Rx(在.NET 3.5中创建执行并行化的应用程序,或者在某种程度上受到限制?我从这里下载了Rxhttp://www.microsoft.com/download/en/confirmation.aspx?id=26649在创建了一个带有引用的反应程序集的简单项目后,我在.NET4.0中找不到任何与Tasks对应的类。我正在为"任务"查找类,但遗憾的是,我找不到任何类。我做错什么了吗?

线程..NET 3.5中Rx扩展中的模拟任务

正如这里提到的,您可以在旧的Rx安装中找到一个后端口System.Threading.dll

为了更容易集成,我用它做了一个nuget(称为TaskParallelLibrary(

你可以从http://nuget.org/packages/TaskParallelLibrary.

据我所知,包含"名为System.Threading.DLL的后端口独立DLL"的Reactive Extensions的最后一个版本是Reactive Extension(Rx(v1.0.2856.0,发布于2011年11月2日(Rx_Net35.msi中(。

(我实际上是从CodePlex下载的Rx_Net35.v1.0.2856.0.msi;再也找不到了……它以C:'Program Files (x86)'Microsoft Cloud Programmability'Reactive Extensions'v1.0.2856.0'Net35'System.Threading.dll的形式安装在我的64位系统上。(

System.Threading,TPL的程序集过去包含在Rx版本中,但现在不再包含。

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

也就是说,IObservable<T>类似于Task<T>,关键区别在于Task<T>只能有1个结果,IObservable<T>是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在.NET 3.5中不能使用Tasks,它使用.NET 3.5线程池-但是,正如Scott所说,当IObservable为一项时,IObservables的工作方式与Task类似。

如果我哪里错了,请纠正我。

观察者和观察者主要与任务相关——观察(等待数据(&订阅(用于观察者获取推送的数据(。

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

1( 。Observable.ObserveOn-在指定的调度程序上异步通知观察者。使用Scheduler可以更好地执行任务,其中它接受的参数

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

第二个也是如此。。。。

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

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

因此,Rx提供了内置的功能来安排您的流程,以获得快速的结果。