用于并行Web服务调用的Rx Framework

时间:2013-01-17 14:34:07

标签: parallel-processing system.reactive

我可以使用Rx框架同时运行多个进程而不会阻止UI吗? 假设我想从我的WPF UI同时调用不同的webservices [可能是1000或更多]。以及每个Web服务调用的结果,我需要将其更新到UI中的网格。我使用Task和Parallel完成了它。但是当我开始这个过程时,并行foreach开始只有1000个服务调用。第一次,需要15或20,一些它调用下一个20或15,等等。所以这不是我想要的。所有1000个呼叫应该同时发生,每个呼叫应该处理其结果并更新回网格!!

使用RX框架可以实现这种类型的操作吗?如果是的话,可以在这个问题上提供任何指导吗?我是RX的新手。

非常感谢

2 个答案:

答案 0 :(得分:0)

我建议你看看ForkJoin方法:http://rxwiki.wikidot.com/101samples#toc3。这是在Rx实验中。

答案 1 :(得分:0)

做你想做的事真的很容易。

以下是如何构建查询的示例:

var query =
    from n in Observable.Range(0, 100)
    from t in webServiceCall(n)
    select new { n, t };

webServiceCall函数具有以下签名:Func<int, IObservable<string>>

我使用以下方法测试了上述内容:

Func<int, IObservable<string>> webServiceCall =
    n =>
        Observable
            .Return(n.ToString() + "!")
            .Delay(TimeSpan.FromSeconds(1.0));

...并使用此订阅:

query.ToArray().Subscribe(results =>
{
    /* array of results here */
});

我在一秒钟内得到了所有结果。

我确实使用Observable.Range(0, 1000)尝试此操作,并在LinqPad中出现内存不足错误,因此您可能需要注意环境中的限制。