func outerFunc(state: UserViewState) { printIsMainThread("outerFunc 1") Task { printIsMainThread("outerFunc 2") _ = await state.user printIsMainThread("outerFunc 3") } } class ViewController: UIViewController { ... state .objectWillChange .receive(on: DispatchQueue.global()) .sink { [weak self] _ in guard let self = self else { return } outerFunc(state: self.state) printIsMainThread("ViewController 1") Task { printIsMainThread("ViewController 2") _ = await self.state.user printIsMainThread("ViewController 3") } } .store(in: &cancellables) ... }