2017-11-15 1 views
0

나는 아래와 같은 새로운 웹 응용 프로그램의 테스트 코드 작성이 :왜 비동기 메서드를 호출 할 때 주 스레드가 즉시 응답을 반환하지 않습니까?

2017년 11월 15일 19 : 55 : 여기

public ActionResult Index() 
    { 
     Logger.Write("start Index,threadId:" + System.Threading.Thread.CurrentThread.ManagedThreadId); 
     MyMethodAsync(System.Web.HttpContext.Current.Request);//no await and has warning 
     Logger.Write("end Index,threadId:" + System.Threading.Thread.CurrentThread.ManagedThreadId); 
     return View(); 
    } 

private async Task MyMethodAsync(HttpRequest request) 
    { 
     Logger.Write("start MyMethodAsync,threadId:" + System.Threading.Thread.CurrentThread.ManagedThreadId); 
     await SomeMethodAsync(request); 
     Logger.Write("end MyMethodAsync,threadId:" + System.Threading.Thread.CurrentThread.ManagedThreadId); 
    } 

그리고 로그 인 31.904 시작 인덱스, threadId : 35

2017년 11월 15일 19 : 55 : 31.919 단부 색인 threadId : 35

2017년 11월 15일 19 : 55 31.919 시작 MyMethodAsync는 threadId 35

2017년 11월 15일 19 : 55 : 53.324 end MyMethodAsync, threadId : 46

클라이언트 브라우저는 약 2017-11-15 19:55:32에 응답을 받고 내 이해와 일치합니다. 실제 프로젝트 프로덕션 환경에서는 위와 같은 로그를 기록하지만 클라이언트 브라우저는 약 22 초 후 2017-11-15 19:55:54에 응답을 수신했습니다. 주 스레드조차도 작업을 완료 한 것으로 보입니다. 주 스레드는 새 스레드가 작업을 완료 할 때까지 응답을 반환하지 않습니다.

나는이 문제를 serveral 일 디버그했습니다. 제발 도와 주실 수 있나요?

답변

0

async-await은 HTTP 프로토콜을 변경하지 않습니다. 요청은 서버로 이동하고 서버는 응답을 생성하여 클라이언트로 보냅니다.

ASP.NET 요청이 ASP.NET에 의해 처리되는 방법 만 변경됩니다.

그리고 요청 처리가 더 빠르지 않습니다. 꽤 대조적 인 것.

그러나 더 많은 스레드 풀 스레드를 사용하고로드가 많은 경우 서버의 응답 속도가 향상됩니다.

+0

Paulo Morgado. 감사합니다. 네가 한 말 알아. 하지만 differenct 솔루션의 동일한 코드가 응답 시간이 다른 이유는 무엇입니까? –

관련 문제