0
javascript/ajax로 호출하기 위해 비동기 끝점 (.NET C#)을 구현하려고합니다. 기본 아이디어는 여러 스레드에서 요청을 동시에 (> 2) 나누어 사용자가 모든 호출에서 개별적으로 응답을 얻고 각 요청의 실행 시간이 실제 계산 (또는 대기) 시간에 해당하도록하는 것입니다. 동시에 비동기 끝점을 호출하는 자바
public async Task<ActionResult> Call1()
{
var client = new HttpClient();
var res = await client.GetAsync("http://httpbin.org/delay/3"); // Takes 3 seconds
return View("~/Views/Dashboard/Test.cshtml");
}
public async Task<ActionResult> Call2()
{
var client = new HttpClient();
var res = await client.GetAsync("http://httpbin.org/delay/2"); // Takes 2 seconds
return View("~/Views/Dashboard/Test.cshtml");
}
는의 브라우저가 동시에 방법 Call1 싶게 Call2를 요청하는 가정하자. 두 통화가 모두 종료 될 때까지 (Call1 (3sec) + Call2 (2sec)) 약 5 초가 걸립니다. 내가 이해하는 한, 이것은 .NET이 비동기 메서드를 사용하여 동시에 호출되었지만 .NET이 비동기 메서드를 처리하고 Call1을 처리하기 전에 Call1이 끝날 때까지 기다리는 것을 의미합니다. 그건 내가 원하는 것이 아니야. 두 서비스 (3 초는 + 2 초)이 호출되지만
제가 정확하게 단지 3 초 정도 이하의 방법에 나타낸 바와 같이 다양한 방법으로 동일한 결과를 달성 할 :
public async Task<ActionResult> Delay()
{
var client1 = new HttpClient();
Task<HttpResponseMessage> async1 = client1.GetAsync("http://httpbin.org/delay/3");
var client2 = new HttpClient();
Task<HttpResponseMessage> async2 = client2.GetAsync("http://httpbin.org/delay/2");
HttpResponseMessage result1 = await async1;
HttpResponseMessage result2 = await async2;
return View("~/Views/Dashboard/Test.cshtml");
}
다른 스레드를 차단하지 않고 동시에 여러 메서드를 처리 할 수 있습니까?
도움 주셔서 감사합니다. vill
"지금까지 내가 이해,이 .NET 동기를 처리하고 Call2을 처리하기 전에 종료 Call1을 기다리는 의미 읽기 메서드 "가 올바르지 않다고 생각하십시오. –
[C# Parallel.ForEach 루프 작성 방법] (https://msdn.microsoft.com/en-us/library/dd460720(v=vs.110).aspx) – user5226582
@ user5226582 : 여러 가지 방법으로 로직을 분리해야하기 때문에 Parallel-Class를 사용할 수 없습니다. – vill