221123 TIL [MainActor로 main thread에서 동작 시키기]

Doogie·2022년 11월 23일
0

TIL

목록 보기
2/2

비동기적으로 코드를 작성하게 된다면 최종적으로 UI 업데이트는 메인스레드에서 진행되어야 한다(swift에서는!)

         DispatchQueue.main.async { [weak self] in
                self?.stopLoading.accept(())
            }

그렇기에 우리는 이런 코드를 통해 작성하곤 했는데 이 DispatchQueue의 메서드들은 @escaping 클로저로 구현이 되어있어서 참조 관리를 해줘야 하는 등 불편함이 있었다

하지만 애플에서 여러 동시성 문제를 해결하기 위해 Actor라는 개념을 도입하면서 메인 스레드에서 작동하기 위한 새로운 방법이 추가가 되었다
(대표적으로 data race와 같은 문제를 보다 쉽게 해결 가능)

await MianActor.run

맨 앞에 await키워드에서 알 수 있듯이 async/await 를 통해 비동기 처리를 할 때 사용하는 키워드 인데 아래와 같이 사용가능하다

        await MainActor.run {
                stopLoading.accept(())
            }

글 앞부분에 작성했던 코드와 다르게 참조관리를 따로 해 줄 필요가 없고 그로 인해 클로저 내부도 간단해짐
그리고 asyn/await를 쓰게 되면 비동기 코드 작성 할 때부터 코드양이 줄어드는게 눈에 띄는데 그건 다음 포스팅에서...

profile
끊임없이 문을 여는 개발자

0개의 댓글