Async / Await

Youn·2022년 6월 3일
0

iOS-Swift

목록 보기
9/11
post-thumbnail

async & await

  • Swift 5.5
  • Completion Handler 없이도 이를 호출한 곳에 알려줌
  • 동시성이랑 다름, 동시성 제공 X

async

  • 함수 이름 뒤에 async = 비동기 함수
func getUser() async thorws -> () {}
  • 동시 컨텍스트에서만 실행 가능
    • 다른 async 함수 내에서
    • Task {} // 수동으로 concurrent context 제공

await

  • async 함수 호출위해 필요
let (data, response) = try awiat URLSession.shared.data(for: request)
// URLSession : iOS 이상에서 나온 async 지원 API
  • await > potential suspension pont(잠재적 일시 중단 지점)으로 지정 (무조건 suspend가 아님)
    • Suspend : 해당 스레드가 다른 동작을 수행할 수 있게 제어권 넘김
    • Yielding 스레드 양보
    • suspension point 에서 유지되는 모든 정보는 Heap 에 저장됨
    • await 호출 전 코드를 실행한 스레드가, 멈췄던 작업을 재개하는 동일 스레드라는 보장은 없음

스레드 제어권

✅ sync 함수 호출시

✅ async 함수 호출시

  • Suspend > 헤딩 thread 에 대한 control 포기
  • System : 스레드를 사용하여 다른 작업 수행, suspend 된 비동기 함수를 계속 실행하는 작업이 가장 중요하다고 판단되는 순간 Resume

Task

  • Swift 가 코드를 병렬로 실행하는 기본 메커니즘
  • 각 Task 는 다른 Task 와 함께 동시(Concurrent)에 실행할 수 있는 새로운 비동기 컨텍스트 제공
  • 명시적으로 생성해야함
  • Task 로 생성된 작업은 Background Thread 에서 즉시 실행, await 으로 완료된 값이 돌아올 때까지 기다릴 수 있음
  • async 에서 또 다른 async 함수 호출 > 동일한 Task 에서 execute call 수행
  • Task - 참고

출처
https://sujinnaljin.medium.com/swift-async-await-concurrency-bd7bcf34e26f

profile
youn

0개의 댓글