WWDC

[WWDC21] Meet AsyncSequence

Phililip
728x90

안녕하세요.

 

AsyncSequence가 뭔지 WWDC 영상 보면서 알아볼게요.

 


# AsyncSequence

async/await은 저번에 'Meet async/await in Swift'에서 알아봤어요.

 

AsyncSequence는 특정 element에 대해 비동기적이고 순차적인 반복 액세스를 제공합니다.

 

이를 위해 for-await-in 또는 for-try-await-in 구문을 사용합니다.

(for-await-in 구문을 사용하면 다음 element가 준비될 때까지 suspend하고, 다음 element가 준비되면 resume 합니다.)

 

 

# Iterating Sequence, AsyncSequence

AsyncSequence가 컴파일러에서 어떻게 동작하는지 가볍게 살펴볼게요.

 

일반적인 Sequence를 for-in loop에서 아래처럼 사용한다고 가정했을 때,

 

 

위 코드는 실제로 컴파일러에서 다음과 같이 동작합니다.

 

 

AsyncSequence는 makeIterator 대신 makeAsyncIterator를 사용합니다.

 

 

# Concurrently Iterating

만약 연속해서 for-await-in loop를 사용한다면, 상위 for-await-in loop가 완전히 종료될 때까지 다른 for-await-in loop가 실행되지 않습니다.

 

 

만약 연속된 for-await-in loop를 동시에 실행시키고 싶으면 Task로 묶어야 합니다.

 

 

# AsyncSequence 적용하기

주기적이고 비동기적으로 데이터를 전달받아야 할 때, 일반적으로는 callback이나 delegate 방식을 많이 사용합니다.

 

 

하지만 이런 상황에서 AsyncStream을 사용하면 AsyncSequence 타입을 준수하므로 for-await-in loop를 사용할 수 있게 됩니다.

 

 

# 참고

https://developer.apple.com/videos/play/wwdc2021/10058

 

Meet AsyncSequence - WWDC21 - Videos - Apple Developer

Iterating over a sequence of values over time is now as easy as writing a “for” loop. Find out how the new AsyncSequence protocol enables...

developer.apple.com

 

 

반응형