线程..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对应的类。我正在为"任务"查找类,但遗憾的是,我找不到任何类。我做错什么了吗?
正如这里提到的,您可以在旧的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提供了内置的功能来安排您的流程,以获得快速的结果。