Parallel processing 用于并行Web服务调用的Rx框架
我可以使用Rx框架在不阻塞UI的情况下同时运行多个进程吗? 假设我想从我的WPF UI同时调用不同的Web服务[可能是1000或更多]。以及每次web服务调用的结果,我需要将其更新到UI中的网格中。我使用Task和Parallel完成了它。但当我开始这个过程时,并行foreach开始时只有1000个服务调用。第一次,它需要15或20,在一些之后,它调用下一个20或15,等等。所以这不是我想要的。所有1000个调用应同时进行,每个调用应注意其结果并更新回网格 使用RX框架是否可以进行此类操作?如果是的话,你能提供这方面的指导吗??我是RX的新手Parallel processing 用于并行Web服务调用的Rx框架,parallel-processing,system.reactive,Parallel Processing,System.reactive,我可以使用Rx框架在不阻塞UI的情况下同时运行多个进程吗? 假设我想从我的WPF UI同时调用不同的Web服务[可能是1000或更多]。以及每次web服务调用的结果,我需要将其更新到UI中的网格中。我使用Task和Parallel完成了它。但当我开始这个过程时,并行foreach开始时只有1000个服务调用。第一次,它需要15或20,在一些之后,它调用下一个20或15,等等。所以这不是我想要的。所有1000个调用应同时进行,每个调用应注意其结果并更新回网格 使用RX框架是否可以进行此类操作?如果
非常感谢我建议您看看ForkJoin方法:。它在Rx实验中。做你想做的事情真的很容易 下面是一个查询的结构示例:
var query =
from n in Observable.Range(0, 100)
from t in webServiceCall(n)
select new { n, t };
webServiceCall
函数具有以下签名:Func
我使用以下方法测试了上述内容:
Func<int, IObservable<string>> webServiceCall =
n =>
Observable
.Return(n.ToString() + "!")
.Delay(TimeSpan.FromSeconds(1.0));
我在一秒钟内就得到了所有的结果
我确实用
Observable.Range(0,1000)
尝试了这一点,但在LinqPad中出现内存不足错误,因此您可能需要注意环境中的限制。谢谢您的帮助。您能否详细介绍webserviceCall方法以便更好地理解?假设我在WPF UI数据网格中收集了1000条记录。调用web服务后,每条记录都必须在WPF UI数据网格中更新自己的状态。@Soonils-在我的示例中,coden
将是每条记录的索引,当您调用web服务时,返回结果将是t
(web服务返回的任何类型)。将n
&t
配对,即new{n,t}
,以便您知道哪个记录具有哪个状态。如果您不介意在收到结果时更新它们,请删除.ToArray()
,这样您就可以一次处理每一对。再次感谢您的回复。我明白你的意思。通常我们做的是,从wpf调用wcf,wcf具有回调功能。当服务执行一些冗长的流程时,它会通过回调返回每个流程状态,直到流程完成。因此,我们可以使用回调来更新UI中每个进程的状态[即,来自服务的fring事件]。我们可以在不使用Rx在WCF中实现回调的情况下做同样的事情吗?哇,太棒了!!!你能解释一下吗…在你的例子中,我如何更新订阅部分的用户界面??非常感谢
query.ToArray().Subscribe(results =>
{
/* array of results here */
});