설명
- 네트워크 요청, 파일 읽기, 데이터베이스 호출처럼 기다리는 시간이 있는 작업에 적합합니다.
- 에디터 도구나 UI가 멈추지 않게 하면서 백그라운드 대기를 처리할 수 있습니다.
- 연산량이 많은 CPU 작업을 무조건 async로 해결하는 것은 아닙니다. async는 "기다림"에 강합니다.
기본 패턴
csharp
public async Task<string> LoadDataAsync(HttpClient http)
{
using HttpResponseMessage response = await http.GetAsync("/api/items");
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}빠른 정리
| 규칙 | 이유 |
|---|---|
Task 또는 Task<T> 반환 | 호출하는 쪽에서 await 할 수 있고 예외도 추적하기 쉽습니다. |
async void는 피하기 | 이벤트 핸들러 외에는 예외 흐름을 관리하기가 어렵습니다. |
| 진짜 비동기 API를 await 하기 | 동기 코드를 Task.Run으로 감싸는 것은 병목을 숨길 뿐입니다. |
| 취소 토큰 전달하기 | 긴 대기 작업을 사용자 흐름에 맞게 중단할 수 있습니다. |
이미지
주의할 점
async 흐름으로 유지할 수 있는 코드에서 .Result나 .Wait()로 강제로 막지
않는 편이 좋습니다. 이런 패턴은 데드락이나 응답성 저하를 자주 유발합니다.