PragmaGames
@PragmaGames
Увлекаюсь Unity.

Как прервать выполнение асинхронного метода с помощью токена?

Всем привет. Вопрос по unitask. Есть такой код :
public class Screen
{
    private CancellationTokenSource closeToken;
    
    //Запускается при открытии окна
    private async void WaitingClosingScreen()
    {
            closeToken = new CancellationTokenSource();

            await UniTask.WaitUntilCanceled(closeToken.Token);
            closeToken.Dispose();

            Navigator.Pop();
     }

      // Нажата кнопка закрытия окна
      private void OnClickClose()
      {
            closeToken.Cancel();
      }

      private aync void OnClickBuy()
     {
            //TODO
            await animator.ShowAnimation(1);
            await animator.ShowAnimation(3);

            closeToken.Cancel();
     }
}


Его проблема в том что если человек попытается закрыть окно во время анимации ( отрабатывает метод OnClickBuy()) отработает метод OnClickClose(). Токен задиспоузится. Но выполнение OnClickBuy() продолжится. Как прервать выполнение OnClickBuy() если игрок нажал на закрытие окна ?
  • Вопрос задан
  • 208 просмотров
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
Либо твой аниматор, тоже принимать и поддерживать токен отмены, либо используешь UniTask.WhenAny() вместе с таском ожидания закрытия и ждёш кто быстрей отработает.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы