在多线程中使用web服务

本文关键字:web 服务 多线程 | 更新日期: 2023-09-27 17:54:30

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

我可以在我这边应用多线程来在多个线程中使用这个web服务并将结果组合在一起吗?

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

在多线程中使用web服务

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

使用Parallel.For 这样的方法,代码本身就相当简单。

简单示例(google.com):

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

Exaplanation:

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

进一步阅读:

MSDN on 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....
}