🧢
async, await 를 사용하면서 겪은 UI thread(Main Thread) 관리 문제
June 24, 2024
async, await?
비동기 프로그래밍을 쉽게 구현하기 위해서 등장한 async, await.
이것을 사용하면서 아래와 같은 런타임 에러가 발생했다.
async, await를 사용하는 코드는 메인 스레드가 아닌 메인 스레드에서 동작하기 때문에, 만약 UI update 와 같은 코드에 async, await 사용해야 할 때에는 스레드 관리를 따로 해줘야한다.
UI 갱신은 메인 스레드에서 동작해야 하기 때문이다!
이것을 해결하는 방법은 아주 간단하다.
UI update 를 담당하는 부분 (예를들어, button 의 action 부분)에 @MainActor 매크로를 추가하면 된다.
결론
UI를 변경할 수 있는 코드가 포함된 async 메서드를 await으로 실행하게되면 해당 메서드는 MainActor를 붙여줘야한다!