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

时间:2016-07-04 16:09:50

标签: c# multithreading web-services

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

我是否可以在我的身边应用多线程来在多个线程中使用此Web服务并将结果组合在一起?

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

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

使用Parallel.For

等方法,代码本身非常简单

简单示例(google.com):

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

<强> Exaplanation:

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

进一步阅读:

MSDN on Parallel.For loops

答案 2 :(得分:0)

如果您并行调用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....
}