async/await는 비동기 코드를 간단하고 가독성 있게 만들 수 있도록 도와주는데, 앱 실행 중에 어떤 비동기 작업을 새로 시작하고 싶을 때 쓰는 게 바로 Task// 비동기 함수
func fetchWeatherAsync() async -> String {
return "맑음"
}
// 비동기 함수는 Task 안에서 실행해야 함
Task {
let result = await fetchWeatherAsync()
print("오늘 날씨: \(result)")
}
async 함수 실행 가능: await 키워드와 함께 사용 가능Task.cancel(): 작업 취소 요청Task.isCancelled: 현재 Task가 취소되었는지 확인Task.sleep(_:): 일정 시간 동안 작업을 지연시킴Task.priority: 우선순위 설정 (.userInitiated, .background 등)Task(priority: .userInitiated) {
let data = await loadData()
print(data)
}
| 우선순위 | 설명 |
|---|---|
.background | 중요도 낮은 작업 (ex. 캐시 생성) |
.utility | 다운로드/처리 작업 |
.userInitiated | 사용자가 요청한 즉각적인 작업 |
.userInteractive | UI와 바로 연결된 빠른 작업 |
Task {
for i in 1...100 {
if Task.isCancelled {
print("작업 취소")
return
}
print(i)
}
}
let task = Task { () -> Int in
return 5 * 2
}
let result = await task.value // 10
Task { }: 일반적인 비동기 작업 (Main/Background 쓰레드에서 실행 가능)Task.detached { }: 독립적으로 실행 (자식 Task ❌, 전역 우선순위 사용)TaskGroup: 여러 Task를 묶어서 실행하고 결과를 모음 (for loop 병렬 처리 등)💡 왜 사용할까?
- 기존의 GCD (DispatchQueue) 와 달리 async/await를 자연스럽게 사용할 수 있음
- 구조화된 동시성 덕분에 Task 간의 의존 관계나 취소 처리 등이 명확해짐
- UI 업데이트를 블로킹하지 않고 비동기 코드 작성이 간결해짐