在多线程中使用Web服务c#

我正在使用c#应用程序中的供应商提供给我的Web服务。 此应用程序在循环中调用Web方法,这会降低性能。 要获得完整的结果集,需要一个多小时。

我是否可以将多线程应用于我的一方,以便在多个线程中使用此Web服务并将结果合并到一起?

有没有更好的方法来在几分钟而不是几小时内检索数据?


首先,你必须确保你的供应商确实支持或不禁止它(这很可能)。

使用诸如Parallel.For的方法,代码本身很简单

简单示例(google.com):

Parallel.For(0, norequests,
               i => { 
                 //Code that does your request goes here
               } );

Exaplanation:

Parallel.For循环中,所有请求都会并行执行(如名称中所示),这可能会显着提高性能。

进一步阅读:

MSDN在Parallel.For循环


你应该真的问你的供应商。 我们只能推测为什么需要这么长时间,或者如果触发多个请求实际上会产生与需要很长时间的结果相同的结果。

基本上,发送一个请求获得一个响应应该胜过多线程变体,因为它应该更容易在服务器端进行优化。

如果你想知道为什么当前版本的服务不是这种情况,请询问供应商。


如果您并行调用Web服务,这只是样本:

private void TestParallelForeach()
{
  string[] uris = {"http://192.168.1.2", "http://192.168.1.3", "http://192.168.1.4"};
  var results = new List<string>();
  var syncObj = new object();
  Parallel.ForEach(uris, uri =>
  {
    using (var webClient = new WebClient())
    {
      webClient.Encoding = Encoding.UTF8;
      try
      {
        var result = webClient.DownloadString(uri);
        lock (syncObj)
        {
          results.Add(result);
        }
      }
      catch (Exception ex)
      {
        // Do error handling here...
      }
    }
  });
  // Do with "results" here....
}
链接地址: http://www.djcxy.com/p/74523.html

上一篇: Consuming a web service in multiple threads c#

下一篇: unable to consume a web service on Android