[Swift] Async, Await

Jade·2024년 2월 2일
0

TIL

목록 보기
10/10
post-custom-banner

Async, Await에 대해서 Araboza


Async, Await

  • 비동기 처리를 할 때 사용한다.
  • 동시성을 구현하는데 유용하다.
// 예시
func bringWebImageUrl(url: String) async -> URL

func processWebImage() async -> Image {
	let result = await bringWebImageUrl("imageUrl")
	return result
}

let image = processWebImage()

  • 실행 흐름
    1. processWebImage() 실행

    2. bringWebImageUrl(”imageUrl”) 로 데이터를 받아오는 요청

      • 작업을 백그라운드에서 실행

      Suspension Point : 함수가 실행되는 도중 스레드를 포기한 시점

    3. 받아온 데이터 result에 저장

    4. resultreturn


  • 함수명 뒤에 붙어있는 async 는 비동기적으로 일을 처리하는 함수라는 뜻이다.
    • async 함수 타입이라고 한다. (async → URL 타입)

  • 하지만 async 함수 내부가 모두 비동기적으로 처리되는 것은 아니다.
    • 그래서 명령 앞에 await 키워드를 붙여서 ‘이곳이 비동기적으로 작업이 수행되는 곳이다’라고 명시한다.
      - await가 붙은 명령이 처리되는 동안 다른 작업들이 실행될 수 있도록 스레드를 포기한다.
      - 비동기(백그라운드) 작업이 완료되면 Suspension Point부터 함수를 재시동한다.
      - 이 작업을 동기적으로 처리하면 데이터를 받아오는 동안 다른 작업이 불가능하다.

  • async 함수 내부에는 sync 함수가 포함될 수 있지만 반대는 불가능하다.
    • sync 함수 내부에 async 함수가 포함되면 async함수를 실행하긴 했으니 작업이 끝나기 전에 sync함수가 작업을 끝내버릴 수도 있기 때문이다.
    • 하지만 반대는 비동기 작업이 필요한 명령 앞에만 await 키워드를 붙이면 된다.
profile
응애 iOS 개발자
post-custom-banner

0개의 댓글