Reactive Extensions - 只对逐个集合执行函数

时间:2014-06-29 13:45:45

标签: c# .net multithreading system.reactive

有没有办法强制Observable.Start中的代码块逐个执行元素?

为了清楚起见,例如,当它完成索引0时,它将在索引1上执行,依此类推......

    public void Click()
    {
        this.strings.ToObservable().Subscribe(
            x =>
            {
                Observable.Start(
                    () =>
                    {
                        //long operation
                        BarValue++;
                    });
            });
    }

1 个答案:

答案 0 :(得分:1)

你走了:

this.strings.ToObservable()
    .Select(x => Observable.Defer(() => Observable.Start(() => { /* ... */ })))
    .Concat();

我们将每个字符串选择为一个Observable,当订阅时,它将启动一个任务并做一些工作(即不像调用Observable.Start那样立即发生工作,这就是为什么我们需要Defer停止开始的方法开始)。

然后,我们通过Concat将所有内容合并在一起,这保证了它将通过一次只运行一个项目来维护流的原始排序。