본문 바로가기
프로그래밍/개발일지

async - await

by 개발하는군인 2023. 4. 4.

요번에 비동기로 처리 해야하는 부분에서 특정 함수끼리는 동기식 형태로 돌아가야하는 부분이 있고C# SimpleServer request 처리시 async 와  await 사용되어 해당 내용을 기록해본다.

 

C# 5.0 부터 새로운 C# 키워드로 async 와  await가 추가되었다. 

 

C# async는 컴파일러에게  해당 메서드가 await를 가지고 있음을 알려주는 역할을 한다. aysnc 메서드의 리턴 타입은 대부분의 경우 Task<TResult>(리턴값 존재),  Task(리턴값이 없는 경우) 인데, Task<int>일 경우 return int 인거 처럼 리턴을 숫자만 리턴한다.  또 다른 async 메서드의 리턴 타입으로 void 타입이 있는데 이벤트핸들러를 위해 void 리턴을 허용 하고 있다.

 

C# await 는  await 는 일반적으로 Task 혹은 Task<T> 객체와 함께 사용된다. Task 이 외의 클래스도 사용 가능한데, awaitable 클래스, 즉 GetAwatier() 라는 메서드를 갖는 클래스이면 함께 사용이 가능하다.  정리하자면 await와 awaitable 객체의 완료를 기다리고 완료 후에는 await 이후의 코드가 실행된다.  

 

간단예제 

 

Main 쓰레드는 test1() 함수를 호출 하면서 프로그램이 계속돌고 있는 상황이고,  test1() 호출 당시에는  Main 쓰레드가 관리하다가 await를 만나는 순간 백그라운드 워커 쓰레드에서 작업을 하게되고  그 이후 코드는 워커 쓰레드에서 동작한다.