我想使用Rx扩展来处理长文件绑定操作的并行化。
工作流程就是这样的:
我的问题是:我应该使用什么Rx调度程序(或调度程序的组合)?
答案 0 :(得分:6)
为此,了解每个Rx可观察订阅是连续工作非常有用。也就是说,对于单个可观察的单个订阅,您可以确保一个项目的onNext
委托在onNext
之前完成,以便开始以下项目。
默认情况下,onNext
委托在当前线程(调用OnNext()
的线程)上执行,但您可以使用ObserveOn()
进行更改。
这对您来说意味着您应该为每个物理驱动器创建一个单独的observable,并在一个单独的线程上观察每个物理驱动器。一种方法是,如果要执行单个可观察的操作,则使用GroupBy()
。
使用哪种特定的调度程序?我认为这几乎没关系。如果ObserveOn()
可用,ScheduleLongRunning()
似乎使用operations.GroupBy(op => op.Drive)
.Select(o => o.ObserveOn(TaskPoolScheduler.Default))
.Do(o => o.Subscribe(op => op.Execute()))
.Subscribe();
,对于最常见的调度程序,它意味着它将创建一个用于观察的新线程。
将所有这些放在一起,您的代码可能类似于:
operations
(假设Drive
可以观察到您的操作类型,它具有Execute()
属性和{{1}}方法。)