c# task와 async/await 비교

task와 async/await는 모두 비동기 처리를 구현하는 데에 쓰는 기능들이다. 예를 들어 처리에 오래 걸리는 a, b, c를 연속으로 처리할 때 보통의 방법 즉 동기로 처리하면 각 작업이 돌아가는 동안 애플리캐이션은 먹통이 된다. 이들 작업을 task나 async/await로 처리하면 이것들은 유저 인터패이스 뜨레드에서 벗어나 백그라운드에서 작동하여 애플리캐이션을 멈추지 않게 한다.

task는 주로 완전히 떠나 보낼 때 이용한다. a, b, c는 제각각 백그라운드에서 작동하여 끝난다. 예를 들어 a, b, c가 서로 영향을 주지 않는 긴 계산이라면 task를 쓰는 게 좋다.

async/await는 순서대로 처리하되 유저 인터패이스 제어 뜨레드를 멈추지 않게 할 때 주로 이용한다. a, b, c는 백그라운드에서 작동하지만 각 작업이 끝날 때까지 다음 작업을 기다리게 한다. 예를 들어 a는 서버에 요청을 하고 응답을 처리하는 작업이고 b는 a의 결과에 따라 대이터배이스에서 쿼리를 실행해야 한다면 async/await가 좋다.

task를 써서도 기다리게 할 수 있고 await 없이 async만 써서 독립적인 비동기를 구현할 수도 있다. 하지만 일반적인 방법들은 아니다.