Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parallel processing 用于并行Web服务调用的Rx框架_Parallel Processing_System.reactive - Fatal编程技术网

Parallel processing 用于并行Web服务调用的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框架是否可以进行此类操作?如果

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

使用RX框架是否可以进行此类操作?如果是的话,你能提供这方面的指导吗??我是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-在我的示例中,code
n
将是每条记录的索引,当您调用web服务时,返回结果将是
t
(web服务返回的任何类型)。将
n
&
t
配对,即
new{n,t}
,以便您知道哪个记录具有哪个状态。如果您不介意在收到结果时更新它们,请删除
.ToArray()
,这样您就可以一次处理每一对。再次感谢您的回复。我明白你的意思。通常我们做的是,从wpf调用wcf,wcf具有回调功能。当服务执行一些冗长的流程时,它会通过回调返回每个流程状态,直到流程完成。因此,我们可以使用回调来更新UI中每个进程的状态[即,来自服务的fring事件]。我们可以在不使用Rx在WCF中实现回调的情况下做同样的事情吗?哇,太棒了!!!你能解释一下吗…在你的例子中,我如何更新订阅部分的用户界面??非常感谢
query.ToArray().Subscribe(results =>
{
    /* array of results here */
});