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