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 는 리턴하지 않아도 된다.
}