Scheduler는 언제(시간), 어떻게(스레드) Publisher의 작업들이 수행될지를 결정하기 위한 프토토콜입니다.
Apple에서 언제, 어떻게...를 위한 api에는 DispatchQueue, OperationQueue, RunLoop등이 있는데요!
그리고 Scheduler는 프로토콜이라고 했는데요.
iOS13부터 DispatchQueue, OperationQueue, RunLoop에서 Scheduler를 채택하고 있기 때문에
이를 그대로 Combine에서도 사용할 수 있습니다@_@
기존에 DispatchQueue를 사용할 때 Closure를 중첩된 형태로 써서
여러 스레드를 전환하면 가독성이 안좋을 수 밖에 없었지만
Combine은 선언형으로 사용하기 때문에 가독성 좋게 사용할 수 있다는 장점도 있겠죠?
Combine에서 이 스케줄러를 변경해주는 방법이 두가지가 있는데요
1. receive(on:)
: downstream의 컨텍스트를 변경
2. subscribe(on:)
: upstream의 실행 컨텍스트를 변경
이렇게 두가지가 있습니다.
Scheduler는 element가 생성된 스레드와 동일한 스레드를 사용합니다.
위의 메서드를 사용하면 생성된 스레드 외에도 스레드를 바꿀 수가 있는거지용!.!
let ioPerformingPublisher == // Some publisher.
let uiUpdatingSubscriber == // Some subscriber that updates the UI.
ioPerformingPublisher
.subscribe(on: backgroundQueue)
.receive(on: RunLoop.main)
.subscribe(uiUpdatingSubscriber)
Scheduler를 사용해서 비동기 처리를 적절한 스레드에서, 적절한 타이밍에서 동작하도록 조절할 수 있겠죠?!
이외에 강제로 동기적으로 수행하도록 만드는 ImmediateScheduler가 있습니다. 해당 스케쥴러에는 시간 옵션을 주어도 이를 무시하고 즉시 실행하는 특징을 가지고 있습니다.
https://developer.apple.com/documentation/combine/scheduler
Apple Developer Documentation
developer.apple.com
https://developer.apple.com/documentation/combine/fail/receive(on:options:)
Apple Developer Documentation
developer.apple.com
https://developer.apple.com/documentation/combine/fail/subscribe(on:options:)
Apple Developer Documentation
developer.apple.com
'Combine' 카테고리의 다른 글
Combine | Operator (0) | 2022.06.02 |
---|---|
Combine | Publisher and Subscriber (0) | 2022.05.24 |
Combine | Overview (0) | 2022.05.09 |