并行web服务调用的Rx框架



我可以使用Rx框架同时运行多个进程而不阻塞UI吗?假设我想从我的WPF UI同时调用不同的web服务[可能是1000或更多]。对于每个web服务调用的结果,我需要将其更新到UI中的网格中。我是用任务并行来做的。但是当我启动这个进程时,Parallel foreach开始时只有1000个服务调用。第一次,它需要15或20个,之后它会调用下一个20或15个,等等。所以这不是我想要的。所有1000个调用应该同时发生,每个调用都应该处理其结果并更新回网格!!

这种类型的操作可以使用RX框架吗?如果有,能否提供一些关于此事的指导?我是一个新手在RX。

Thanks to lot

我建议您看一下ForkJoin方法:http://rxwiki.wikidot.com/101samples#toc3。

做你想做的真的很容易。

下面是一个查询应该如何结构化的例子:

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中得到了内存不足的错误,因此您可能需要注意您在环境中的限制。

相关内容

  • 没有找到相关文章

最新更新