Управление источником токена отмены между вызовами с задержками - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь реализовать logi c

  1. когда код NavigateToAsyn c запускается через несколько секунд
  2. при вызове метода Pause Мне нужно прекратить выполнение NavigateToAsyn c.
public async Task StartAsync()
        {
            this.tokenSource = new CancellationTokenSource();
            this.delayToken = this.tokenSource.Token;

            Task.Delay(this.delayTimeout, delayToken).ContinueWith(async (delayTask) =>
            {
                if (!delayToken.IsCancellationRequested)
                {
                    if (!this.isAlreadyStarted)
                    {
                        this.isAlreadyStarted = true;
                        await this.navigator.NavigateToAsync(this.delayToken);
                    }
                }
            });
        }

public void Pause()
        {
            this.tokenSource.Cancel();
            this.isAlreadyStarted = false;
        }

Но в случае, когда NavigateToAsyn c уже запущен и пользователь снова вызывает StartAsyn c Я теряю дескриптор tokenSource, поэтому метод Pause не может отменить действие.

Как лучше всего это исправить?

...