async, await?

비동기 프로그래밍을 쉽게 구현하기 위해서 등장한 async, await.

이것을 사용하면서 아래와 같은 런타임 에러가 발생했다.

사진

async, await를 사용하는 코드는 메인 스레드가 아닌 메인 스레드에서 동작하기 때문에, 만약 UI update 와 같은 코드에 async, await 사용해야 할 때에는 스레드 관리를 따로 해줘야한다.

UI 갱신은 메인 스레드에서 동작해야 하기 때문이다!

이것을 해결하는 방법은 아주 간단하다.

UI update 를 담당하는 부분 (예를들어, button 의 action 부분)에 @MainActor 매크로를 추가하면 된다.

사진

결론

UI를 변경할 수 있는 코드가 포함된 async 메서드를 await으로 실행하게되면 해당 메서드는 MainActor를 붙여줘야한다!