Вступить в клуб →
средняявопросC# и жизненный цикл Unity

Асинхронная загрузка профиля падает, когда игрок выходит со сцены

Экран профиля грузит данные с сервера:

public class ProfileScreen : MonoBehaviour
{
    [SerializeField] private TMP_Text nameLabel;

    private async void Start()
    {
        var data = await _api.LoadProfileAsync();
        nameLabel.text = data.Name;
    }
}

Если игрок закрывает экран и уходит в бой, пока запрос ещё идёт, в лог прилетает обращение к уничтоженному объекту. Что здесь по сути не так?

  • Обращаться к интерфейсу после await запрещено: продолжение метода выполняется в фоновом потоке, а объекты интерфейса доступны только из главного потока
  • Задача не связана с жизнью объекта: она доживёт до конца после Destroy и обратится к уничтоженному компоненту — нужен токен отмены
  • Достаточно обернуть await в try/catch: исключение перестанет попадать в лог, и проблема будет решена
  • Unity прерывает все асинхронные методы при выгрузке сцены, значит причина в самом запросе: сервер отвечает после смены сцены и ломает разбор ответа

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела