iOS/Swift Concurrency

async await

Hamp 2024. 10. 24. 19:57
반응형

  1.  

async 키워드

  • 비동기 함수를 선언할 때 사용한다.
  • 비동기는 멈췄다가 다시 재개 될 수 있는 함수
  • 콜뱅방식이 아닌 직접 리턴을 할 수 있다.
  • 메인 엑터가 아닐 경우 , 항상 백그라운드 스레드에서 실행된다.
  • 비동기 함수내에서 다른 비동기 함수를 호출하면 현재 컨텍스에서 실행됨 , 새로운 컨텍스 생성 x  , 취소 전파가 가능

문법

func 함수명 async throws(에러를 발생시키면) -> 리턴 타입 { ... }

await 키워드

  • 비동기 함수를 사용할 때 붙혀준다.
  • Task와 같은 비동기 context에서 사용할 수 있다.
  • potential suspension point 지점이된다.

🤨 왜 잠재적 일시 중단 지점일까?

  • 실제 중단 지점은 I/O 작업 또는 URL 세션같은 작업에서만 발생
  • 컨커런시 이용 시, 개발자가 중단 지점을 만들일은 없다고 봐도 무방

suspend

  • non - blocking 방식
  • suspend이란, 쓰레드 제어권을 운영체제를 넘겨 다른 일을 처리할 수 있도록 하는 행위를 말한다. 
  •  이후 일시중지된 작업은 다시 재개될 때 , 일시 중지 전 스레드와 다른 스레드가 할당될 수 있다.

문법

try(에러를 던진 다면) await 함수명()

반응형