【问题标题】:Threading.Tasks analog in Rx extensions in .NET 3.5?.NET 3.5 中的 Rx 扩展中的 Threading.Tasks 模拟?
【发布时间】:2011-10-17 00:48:42
【问题描述】:

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

【问题讨论】:

    标签: c# .net-3.5 system.reactive


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      据我所知,包含“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 .)

      【讨论】:

      【解决方案3】:

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

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

      也就是说,IObservable<T> 类似于 Task<T>,主要区别在于 Task<T> 只能有 1 个结果,IObservable<T> 是 0 个或多个结果的流。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          .NET 3.5 中的 Rx 不能使用任务,它使用 .NET 3.5 线程池 - 但是,正如 Scott 所说,当 IObservable 是一个项目时,IObservable 的工作方式与任务类似。

          【讨论】:

            【解决方案6】:

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

            Observables 和 Observers 主要与任务相关——Observe(等待数据)&Subscribe(让 Observers 获取推送的数据)。

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

            1)。 Observable.ObserveOn - 在指定的时间表上异步通知观察者。 可以使用 Schedular 以更好的方式执行任务,其中它接受参数中的任何一个

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

            第二个也一样……

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

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

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

            【讨论】:

              猜你喜欢
              • 2011-09-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-05-08
              相关资源
              最近更新 更多