ASP.NET中使用线程的多个并发Web服务请求

时间:2011-11-17 15:55:41

标签: c# asp.net multithreading web-services

我需要同时向Web服务发出多个请求。我想为每个请求创建一个线程。可以在ASP.NET v3.5中完成吗?

示例:

for(int i = 0; i<=10; i++)
{
   "Do each Request in a separate thread..."
}

4 个答案:

答案 0 :(得分:5)

虽然您可以使用的机会取决于您希望在代码中使用并行性的内容和位置。我建议您从.NET 4.0中使用新的Task类开始。 例如:

Task backgroundProcess = new Task(() =>
                {
                    service.CallMethod();
                });

这将帮助您入门。在那之后,我建议你做一些阅读,因为这是一个非常广泛的主题。试试这个链接:

http://www.albahari.com/threading/

答案 1 :(得分:2)

以下模式可用于将多个请求作为ThreadPool中的工作项分拆。在继续之前,它还将等待所有这些工作项目完成。

int pending = requests.Count;
var finished = new ManualResetEvent(false);
foreach (Request request in requests)
{
  Request capture = request; // Required to close over the loop variable correctly.
  ThreadPool.QueueUserWorkItem(
    (state) =>
    {
      try
      {
        ProcessRequest(capture);
      }
      finally
      {
         if (Interlocked.Decrement(ref pending) == 0) 
         {
           finished.Set();  // Signal completion of all work items.
         }
      }
    }, null);
}
finished.WaitOne(); // Wait for all work items to complete.

您也可以下载3.5 Reactive Extensions backport,然后使用Parallel.For执行相同操作。

答案 2 :(得分:0)

如果Web服务调用是异步的,我不会看到多个线程如何完成任何操作。

答案 3 :(得分:0)

在.NET 3.5中,您可以使用ThreadPool QueueUserWorkItem方法。网上有很多例子。