Должен ли я установить токен отмены после его отмены? - PullRequest
0 голосов
/ 09 февраля 2020

Мой код объявляет токен отмены здесь в модели представления, создает его в OnAppearing и отменяет в OnDisappearing:

public partial class DeckTabViewModel : BaseViewModel
{
    public CancellationTokenSource cts;
}

Затем в OnAppearing:

public partial class DeckTabViewModel : BaseViewModel
{
    public async Task OnAppearingAsync()
    {
        cts = new CancellationTokenSource();
        await GetCards(cts.Token);
    }
}

И на Исчезает:

public partial class DeckTabViewModel : BaseViewModel
{
    public async Task OnDisappearingAsync()
    {
       cts.Cancel();
    }
}

Может кто-нибудь сказать мне, если это правильный способ использования токена отмены, и я должен в OnDisappearing, также установить его на ноль?

1 Ответ

0 голосов
/ 09 февраля 2020

Поскольку CancellationTokenSource реализует IDisposable , вы должны располагать экземпляром CancellationTokenSource (в вашем примере cts), когда вы закончили его использовать: вы можно сделать это напрямую, вызвав метод Dispose, или косвенно, используя конструкцию using.

В вашем случае вы бы позвонили Dispose после вызова Cancel на cts:

public partial class DeckTabViewModel : BaseViewModel
{
    public async Task OnDisappearingAsync()
    {
        try
        {
            cts.Cancel();
        }
        finally
        {
             if(cts != null)
             {
                 cts.Dispose();
             }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...