使用.Net Parallel Extensions(Parallel.Invoke)进行多个异步调用?

puf*_*pio 5 .net asynchronous parallel-extensions

目前,我有一段代码需要对各种数据提供者进行大约7次Web服务调用.每次调用都需要几秒钟才能执行,所以我想并行运行它们以加快速度.

我将7个调用包装在Parallel.Invoke中,它可以同时运行几个东西,但在2核心服务器上,它一次只执行2个,每个核心一个.由于我正在做的就是等待Web服务调用返回,我希望它能够获取所有7并等待它们返回.

有没有办法做到这一点?或许我的方法错了?也许我需要创建对Web服务的异步调用?但那么如何等待他们全部回来再继续前进?

Ree*_*sey 5

但是在2核服务器上,它一次只能执行2个,每个核心一个

我会质疑这一点 - Parallel.Invoke通常会运行比系统中的核心更多的任务.

话虽这么说,如果您正在使用异步方法调用调用,我建议使用Task.Factory.FromAsync(...)来生成七个不同的任务.

这提供了在任务执行时执行其他工作的灵活性,然后在您决定使用结果时调用Task.WaitAll(或Task.WaitAny).

另一方面,Parallel.Invoke将一直阻塞,直到所有七个完成.

  • 我得到的印象是他确实希望在继续之前完成所有这些工作. (2认同)