후기
- serial 과 sync 의 구분을 정확하게 이해하기
- serial queue 에 전달한 task 는 순서대로 실행된다.
- sync 방식으로 전달한 task 가 반환되기 전까지 메인 작업 쓰레드는 block 된다.
- PP 전에 티켓에 대한 조사와 협의가 충분히 더 이루어져야겠다고 생각
목표
- 필기 자동 저장 및 동기화 작업의 일부
- 작업 1, 작업 2, 작업 3, 작업 4 가 순서대로 나란히 실행되어야한다.
- 최대한 first-party api 를 사용하고 싶다. (gcd, combine)
방법들
1. serial queue
- 작업 실패 처리가 불가능함
- 즉, 호출 실패 응답 시 나머지 작업 취소가 어려움
- queue 의 작업을 취소하기 위한 API 가 존재
- DispatchWorkItem.cancel()
- NSOperation 을 사용하지 않아도 작업 취소가 가능한 것을 알게 되었다.
- 하지만 원하는 동작을 구현하기는 어려움
2. Rx.flatmap
- 현재 시도하고 있는 방법
- 4개의 작업을 serial 하게 처리하기 위하여, flatmap 4개를 나란히 있는 아이디어로 구현중
- subscription 의 생명주기가 헷갈린다.
- flatMap 이 반환하는 Observable 이 onError 이벤트를 방출한다면?
- onError - 에러처리도 헷갈려서 찾아보았다.
3. async-await
- Xcode 버전이 외부 SDK 에 의해 묶여있어서 아쉽지만 사용하지 못한다.
4.combine
- 사용법을 아직 몰라 학습시간이 필요하여 이번 구현에서는 고려하지 않았다.