我可以使用Rx框架同时运行多个进程而不会阻止UI吗? 假设我想从我的WPF UI同时调用不同的webservices [可能是1000或更多]。以及每个Web服务调用的结果,我需要将其更新到UI中的网格。我使用Task和Parallel完成了它。但是当我开始这个过程时,并行foreach开始只有1000个服务调用。第一次,需要15或20,一些它调用下一个20或15,等等。所以这不是我想要的。所有1000个呼叫应该同时发生,每个呼叫应该处理其结果并更新回网格!!
使用RX框架可以实现这种类型的操作吗?如果是的话,可以在这个问题上提供任何指导吗?我是RX的新手。
非常感谢
答案 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中出现内存不足错误,因此您可能需要注意环境中的限制。