2016-08-13 3 views
0

하나의 HTTP GET 요청을 많은 서버에 보내고 버튼 클릭시 각각에서 응답을 받아야하는 간단한 C# 응용 프로그램이 있습니다. 또한 모든 서버가 응답 한 후에 일부 작업을 수행해야합니다. 따라서 비동기 작업과 함께 HttpWebRequest 클래스를 사용할 수 있으며 모든 콜백에서 총 응답 수를 계산할 수 있습니다. 하지만 예를 들어 Async과 같은 고급 콜백 흐름 제어를위한 특수 라이브러리가있을 수 있습니다.C에서 단일 콜백으로 여러 개의 비동기 HTTP 요청 만들기

+0

이 문제에 접근하기에는 너무 많은 방법이 있습니다. 대답은 한 사람이 좋아하는 밀짚 여론으로 변할 것입니다. 가장 좋은 방법은 스스로 주제에 대한 연구를하고, 두세 가지를 찾아서 분석하고, 그들이 당신을 위해 일하는가 아닌가를 결정하고, 그들을 밖으로 시험해 보는 것입니다. 당신이 시도한 것에 대해 특정한 질문이있을 때 우리에게 오십시오. – FrankerZ

+0

@FrankerZ 여러 비동기 작업에 대해 단일 콜백을 허용하는 간단한 콜백 라이브러리가 필요합니다. – JustLogin

+0

불행히도, 책, 도구, 소프트웨어 라이브러리, 자습서 또는 기타 오프 사이트 리소스를 추천하거나 찾도록 요청하는 질문은 여기서도 논점이됩니다. 보다 나은 행운을 찾을 수 있습니다 [SoftwareRecs.SE] (// softwarerecs.stackexchange.com/tour). 이 사이트보다 더 엄격하므로 [질문 요구 사항] (// softwarerecs.stackexchange.com/help/on-topic)을 반드시 읽으십시오. – FrankerZ

답변

2

HttpWebRequest.GetResponseAsync으로 전화하여 Task<WebResponse>을 얻을 수 있습니다. 그런 다음 다른 작업을 수행하려면 Task.WhenAll으로 전화를 걸면됩니다.이 작업은 다른 모든 작업이 끝날 때 종료됩니다. 모든 작업을 동 기적으로 대기하려면 Task.WaitAll을 사용하십시오.

예 :

async void StartRequests() 
{ 
    // start requests 
    var responseTasks = requests 
    .Select(
     r => HttpWebRequest.GetResponseAsync(r) 
      // you can attach continuation to every task 
      .ContinueWith(t => ProcessResult(t.Result))) 
    .ToArray(); 
    // wait for all tasks to finish 
    await Task.WhenAll(responseTasks); 
    // ... 
} 

유용한 링크 : 또한 Task Parallel Library, Asynchronous Programming with async and await

, 나는 System.Net.Http.HttpClient는 HTTP 호출을 만들기위한 더 편리한 클래스입니다, 생각합니다.