async let, Task, 취소
async let 으로 작업을 병렬 실행하고, 독립적인 Task 를 만들며, 협력적으로 취소 를 처리합니다.
async let, Task, 취소은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 3개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
다룰 내용
다음 내용을 학습합니다.
- 비동기 let으로 형제 작업 시작하기
- Task { }로 독립적인 작업 단위 실행하기
- 협력적 검사를 사용해 취소에 대응하기
비동기 let 기초
비동기 let은 같은 범위 안에서 자식 작업을 병렬로 시작합니다. 범위를 벗어나기 전에 반드시 await를 사용해야 합니다.
func loadA() async -> Int { try? await Task.sleep(nanoseconds: 200_000_000); return 1 }
func loadB() async -> Int { try? await Task.sleep(nanoseconds: 200_000_000); return 2 }
Task {
async let a = loadA()
async let b = loadB()
// Both start immediately; awaiting joins them
let sum = await (a + b)
print("sum =", sum) // 3
}독립적인 Task
Task {}를 사용해 독립적인 작업을 시작하고, 나중에 await t.value로 결과를 가져오십시오.
// Create an independent task (not tied to current scope)
func fetchMessage() async -> String {
try? await Task.sleep(nanoseconds: 150_000_000)
return "hello"
}
let t = Task { await fetchMessage() }
Task {
print("from Task:", await t.value) // waits for the independent task's result
}취소 기초
취소는 협력적으로 이루어집니다. Task.checkCancellation()로 확인하면 오류가 발생하고, Task.isCancelled를 읽어 일찍 반환할 수도 있습니다.
// A long-running job that checks for cancellation
enum WorkError: Error { case cancelled }
func longJob() async throws -> Int {
var total = 0
for i in 1...10 {
try Task.checkCancellation() // throws CancellationError if cancelled
try? await Task.sleep(nanoseconds: 50_000_000)
total += i
}
return total
}
let job = Task { try await longJob() }
Task {
// Cancel after a short delay
try? await Task.sleep(nanoseconds: 120_000_000)
job.cancel()
do {
_ = try await job.value
} catch {
print("job cancelled") // expected
}
}부모 → 자식 취소
부모 작업이 취소되면 자식 작업이 이를 감지하고, 검사 후 빠르게 종료해야 합니다.
// Propagate cancellation from parent to children using async let
func part(_ id: Int) async throws -> String {
try Task.checkCancellation()
try? await Task.sleep(nanoseconds: 80_000_000)
return "P\(id)"
}
Task {
do {
async let p1 = part(1)
async let p2 = part(2)
// Cancel the whole operation before awaiting
Task.currentTask?.cancel() // cancel self -> children see cancellation
let out = try await [p1, p2].joined(separator: ",")
print(out)
} catch {
print("parent cancelled; children stopped")
}
}지침
팁:
- 형제 작업에는 비동기 let을 사용하고, 항상 같은 범위에서 기다리십시오.
task.cancel()로 취소하고, 작업 내부에서는Task.checkCancellation()을 호출하십시오.- 작고 비동기적인 함수를 우선 사용하십시오. 취소하고 테스트하기 쉽습니다.
협력적 취소 동작
빠른 확인: 오래 실행되는 비동기 코드는 취소에 어떻게 반응해야 할까요?
복습
복습: 비동기 let으로 형제 작업을 시작하고, Task {}에서 독립적인 작업을 실행하십시오. 검사 후 즉시 종료하는 방식으로 협력적 취소를 구현하십시오.
자주 묻는 질문
“async let, Task, 취소” 강의는 무료인가요?
네 — “async let, Task, 취소” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
“async let, Task, 취소”에서 뭘 배우나요?
async let 으로 작업을 병렬 실행하고, 독립적인 Task 를 만들며, 협력적으로 취소 를 처리합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 2번째 강의입니다.
“async let, Task, 취소” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 구조적 동시성, 비동기 함수
- async let, Task, 취소
- try await와 오류 전파