我必须使用 C# 并行调用多个不同的 Web 服务
I have to call multiple different web services in parallel using C#
我有一个要求,需要向不同服务器上托管的不同 Web 服务发送多个并行调用。我必须阅读配置文件才能知道必须进行多少次调用。假设有 4 台服务器,每台服务器上都有一个 Web 服务。配置的值为 4 那么我必须并行调用每个服务 4 次。总调用次数为 16。这是我完成的代码:
string XmlFile = ConfigurationManager.AppSettings["XMLFile"].ToString();
int num = Convert.ToInt16(ConfigurationManager.AppSettings["NumberOfCalls"]);
Service service1 = new InfoMsg.Manager.Service();
Service service2 = new InfoMsg.Manager.Service();
Service service3 = new InfoMsg.Manager.Service();
Service service4 = new InfoMsg.Manager.Service();
string xmlString = System.IO.File.ReadAllText(XmlFile);
if (!string.IsNullOrEmpty(xmlString))
{
Parallel.For(0, num, i =>
Parallel.Invoke(() => service1.CheckInXML(xmlString),
() => service2.CheckInXML(xmlString),
() => service3.CheckInXML(xmlString),
() => service4.CheckInXML(xmlString))
);
}
我实际上打了 14 到 16 个电话,所以出了点问题。这是正确的做法吗?
要回答这个问题,删除 Parallel.Invoke 就足够了。 Parallel.For 应该完成工作,这就是 Parallel.For 本质上所做的。
我有一个要求,需要向不同服务器上托管的不同 Web 服务发送多个并行调用。我必须阅读配置文件才能知道必须进行多少次调用。假设有 4 台服务器,每台服务器上都有一个 Web 服务。配置的值为 4 那么我必须并行调用每个服务 4 次。总调用次数为 16。这是我完成的代码:
string XmlFile = ConfigurationManager.AppSettings["XMLFile"].ToString();
int num = Convert.ToInt16(ConfigurationManager.AppSettings["NumberOfCalls"]);
Service service1 = new InfoMsg.Manager.Service();
Service service2 = new InfoMsg.Manager.Service();
Service service3 = new InfoMsg.Manager.Service();
Service service4 = new InfoMsg.Manager.Service();
string xmlString = System.IO.File.ReadAllText(XmlFile);
if (!string.IsNullOrEmpty(xmlString))
{
Parallel.For(0, num, i =>
Parallel.Invoke(() => service1.CheckInXML(xmlString),
() => service2.CheckInXML(xmlString),
() => service3.CheckInXML(xmlString),
() => service4.CheckInXML(xmlString))
);
}
我实际上打了 14 到 16 个电话,所以出了点问题。这是正确的做法吗?
要回答这个问题,删除 Parallel.Invoke 就足够了。 Parallel.For 应该完成工作,这就是 Parallel.For 本质上所做的。