2011-11-17 118 views
1

我需要同時向webservice發出多個請求。我想爲每個請求創建一個線程。這可以在ASP.NET v3.5中完成嗎?ASP.NET中使用線程的多個併發web服務請求

例子:

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

-1您的問題並未表明任何研究工作。 –

+0

你能更具體一點嗎?如果這與將數據從服務器發送到數據庫有關,那麼可以激發多個Web服務 – aggietech

+0

可能最值得問的問題是,「我真的需要使用此多線程嗎?」 –

回答

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. 

您也可以下載Reactive Extensions反向移植3.5,然後用Parallel.For做同樣的事情。

5

雖然oportunities你可以用什麼取決於你想在你的代碼中使用paralelism什麼,在哪裏發生變化。我建議你從.NET 4.0開始使用新的Task類。 示例如下:

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

這會讓你開始。之後,我建議你做一些閱讀,因爲這是一個非常廣泛的主題。嘗試此鏈接:

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

+0

我使用.Net 3.5,我認爲不可能使用這個類! – mcamara

+0

@tomcamara - 閱讀我在我的答案張貼的文章。如果您使用.NET 3.5,那麼你可以使用線程池或只是實例化一個新的線程。這一切都取決於使用情況。 – TheBoyan

+0

好@bojanskr即時閱讀...非常感謝你! – mcamara

0

如果Web服務調用是異步的我看不出有多個線程將一事無成。

0

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