본문 바로가기

기타

[C#] sync, await 비동기 처리 프로그래밍 구현

 

진단도구(Diagnostic Tools) 활성화


비동기 처리 프로그래밍을 공부하기 위해서는 실제 소요시간이 얼마나 됐는지 알아야합니다.

따라서 비주얼 스튜디오에서 제공하는 진단 도구를 이용하여 소요시간이 얼마나 됐는지 확인하겠습니다.

 

먼저 ASP.Net 프로젝트 생성 후 다음과 같이 진행합니다.

※ 비주얼 스튜디오는 디버깅모드의 화면을 별도로 구성할 수 있기 때문에 반드시 디버깅 모드에서 활성화해야합니다.

디버그 > 창 > 진단 도구 표시

단축키 : 'Ctrl + Alt + F2'

 

진단도구(Diagnostic Tools)를 이용하여 소요시간 확인


'Controllers\HomeController.cs'에 다음 메서드를 추가합니다.

// HomeController.cs

public static void Test1() {
	Thread.Sleep(4000);	//4초 딜레이
}

public static void Test2() {
	Thread.Sleep(6000);	//6초 딜레이
    }

 

Contach() 메서드를 다음과 같이 작성합니다.

public ActionResult Contact() {
    Test1();
    Test2();
    
    return View();
}

 

'Test1'에선 4초, 'Test2'에선 6초가 걸리며 총 10초의 시간이 소요됩니다.

 

실제 시간을 확인하기 위해 'Contact()' 메소드의 'Test1()'과 'return 0'에 중단점(F9)을 설정한 후 디버깅(F5)을 시작하면 페이지가 활성화 됩니다.

활성화 된 페이지의 연락처(Contact) 탭을 클릭하면 'Contact()' 메서드의 'Test()'가 하이라이트 되는데 F5를 한 번 더 눌르면 다음과 같이 시간을 확인할 수 있습니다.

 

비동기 처리 프로그래밍


비동기 함수 선언의 구조는 다음과 같습니다.

public asycn Task<T> 메서드명() { await 실행문; }

public asycn Task<T> 메서드명() {
	await 실행문;
}

'await' 키워드는 'asycn' 키워드와 항상 쌍을 맞춰야합니다.

'T'는 반환값이며 생략 가능합니다.

 

실제 소요시간을 확인해보겠습니다.

'Controllers\HomeController.cs'에 다음 메소드를 추가합니다.

public async Task Test1Async() {
	await Task.Delay(4000); 
}
 
 public async Task Test2Async() {
 	await Task.Delay(6000);
}

 

Contach() 메서드 비동기적으로 실행하기 위해서 다음과 같이 작성합니다.

public async Task<ActionResult> Contact() {
	var test1 = Test1Async();		//중단점 설정
    var test2 = Test2Async();
    await test1; await test2; return View();	//중단점 설정
}

 

'Test1Asycn()'메서드는 4초, 'Test2Asycn()'메서드는 6초가 걸리며 비동기적으로 실행하게 된다면 총 6초가 걸립니다.

 

실제 소요시간을 확인하기 위해 'Contact()' 메서드의 'Test1()'과 'return 0'에 중단점(F9)을 설정한 후 디버깅(F5)을 시작하면 홈페이지가 활성화 됩니다.

활성화 된 홈페이지의 연락처(Contact) 탭을 클릭하면 'Contact()' 메서드의 'Test()'가 하이라이트 되는데 F5를 한 번 더 눌러주면 다음과 같이 시간을 확인할 수 있습니다.

 

 

반응형