Swift

[Swift] DispatchQueue.global() 과 Task.detatched(priority: .background) 의 차이점

insub4067 2023. 10. 24. 12:01

 

 

Task | Apple Developer Documentation

A unit of asynchronous work.

developer.apple.com

DispatchQueue.global().async {
	// background work
}
// struct 이기 때문에 변수에 할당 가능
let task = Task.detatched(priority: .background) {
	try await doSomethingBadAss()
}

Task {
	// task.result 로 결과를 예외 처리 가능
    switch await task.result {
    case .success(let result):
	    break 	
    case .failure(let error):
    	break 	
    }
    
    // failure 처리 안할꺼면 그냥 value (success 에 대한 return) 만 받을 수도 있음
    await task.value
}

// 맘 바뀌면 실행중인 테스트 블록을 취소해 버릴수도 있음
task.cancel()

둘다 Sendable 이라서 data race 에 안전하긴 함!