0

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

这种类型的操作是否可以使用 RX 框架?如果是,可以在这件事上提供任何指导方针吗?我是RX的新手。

非常感谢

4

2 回答 2

0

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

于 2013-01-17T16:25:18.093 回答
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 中出现内存不足错误,因此您可能需要注意环境中的限制。

于 2013-01-18T07:18:50.287 回答