동기함수의 비동기적 활용

리얼큐·2023년 4월 26일
  • 동기함수
int TakeLongTimeFunction(string path)
{
	// 작업시간이 긴 함수
}
  • 동기함수의 비동기적 활용
    await 는 Task, Task 를 반환하는 메소드에만 사용되는 예약어이다. 한편, async 는 void, Task, Task 를 반환하는 메소드에만 사용되는 예약어이다. await/async 를 사용하기 위하여 동기함수를 Task로 만들어서 반환하는 함수로 감싼 후, 그 함수를 이용한다.
// (1) 동기함수를 Task로 만들어서 반환하는 래핑함수를 만든다.
public Task<int> MyFunctionAsync(string path)
{
	Task task = new Task( () => {
  		return TakeLongTimeFunction(path);
  	});  
}
  
// (2) 래핑함수(비동기함수)를 호출하는 함수를 작성한다. 
//     내부에서 await 를 사용하므로 async 예약어를 사용하며,
//     반환값으로는 void, Task, Task<TResult> 를 사용한다.
public async Task MyFoo(string path)
{
  	// Task<int> 가 반환되지만 int 로 자동변환된다.
	int result = MyFunctionAsync(path);
  	
  	// 반환형식 Task 는 리턴하지 않아도 된다.
}

0개의 댓글