Так подход в целом не меняется.
Если происходит действие (нажатие кнопки, поле редактировать завершилось, вью развернулась) это происходит в главном UI потоке, его ты не должен (останавливать, блокировать)
И пока ты находишься в этом потоке, вызываешь асинхронный метод, (и в этом асинхронном методе ты в принципе не должен работать с ui) вот после этого, нет проблем, бери данные и меняй UI, все что в методе происходит уже не важно в каком потоке, потому что UI в это время свободный.
Все упирается в ненужную сложность, уверен что решается все парой строк