2011-11-17 1 views
1

웹 서비스에 동시에 여러 요청을해야합니다. 각 요청에 대한 스레드를 만드는 생각. ASP.NET v3.5에서이 작업을 수행 할 수 있습니까?ASP.NET에서 스레드를 사용하는 여러 동시 웹 서비스 요청

예 :

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

-1 귀하의 질문은 연구 노력을 나타내지 않습니다. –

+0

좀 더 구체적으로 알려주시겠습니까? 이것이 서버에서 db로 데이터를 전송하는 것과 관련이 있다면, 여러 웹 서비스를 실행할 수 있습니다. – 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. 

당신은 또한 같은 일을 Parallel.For를 사용하여 다음 3.5의 Reactive Extensions 백 포트를 다운로드 할 수 있습니다.

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

ok @bojanskr 메신저 읽기 ... 고맙습니다. – mcamara

0

를 웹 서비스 호출이 비동기 경우 난 아무것도 성취 할 여러 스레드가 표시되지 않습니다.

0

.NET 3.5에서는 ThreadPool QueueUserWorkItem 메서드를 사용할 수 있습니다. 웹상에 많은 예제가 있습니다.

관련 문제