我正在寻找使用Parallel.For
来调用需要一段时间才能返回的Web服务,但是,我们知道我们可以同时多次调用它,并且不会花费太多时间单一电话。从Parallel.For获取结果
为此,我尝试了Parallel.For,我真的想检查我的想法如何工作。我可能会有些过于谨慎,因为我不想搞砸这个应用程序,我想确保如果我们走这条路线,整个应用程序团队都会知道访问并行代码时需要做什么。
无论如何,这里是我目前的工作和理解。
public IEnumerable<HotelAvail> GetAvailability (IList<string> codes, DateTime startDate, int numNights)
{
HotelAvail[] result = new HotelAvail[codes.Count];
Parallel.For(0, codes.Count, i =>
{
string code = codes[i];
result[i] = new AvailService().
GetAvailability(
code, startDate, numNights);
});
return result;
}
的AvailService
得到房间给一个指定的日期范围(startDate
+ numNights
)的可用性。 code
是属性的标识符。
我在开始时设置了大量空槽的正确大小的结果数组。
然后我并行地调用服务。该服务会创建一个新的对象,并将其放置在阵列中正确的位置。
当一切完成后,我返回数组。它应该在这一点上被充分填充。应该没有空白。该服务不会影响系统状态的任何其他部分 - 它只是建立一个Web服务调用,调用它,并返回一个结果对象。
有没有这个问题,我没有看到。
就像我上面说过的,我可能过于谨慎了,但在更年轻和旺盛的日子里我写了多线程代码,我不想再犯同样的错误。
此外,这段代码最终将在ASP.NET应用程序中结束。我隐约记得,它抱怨了很多关于多线程代码。我可能在那里遇到任何其他问题?
这部分是我想要使用的Parallel.For如果我必须做出10个服务电话的原因,每个大约需要4到7秒才能返回,然后是40到70秒来获得这些数据。如果我可以平行打电话,结果是每次通话平均6-9秒,但我可以一次打5个电话,然后是12到18秒。显着的节约。 – 2011-02-07 15:56:16