首页 > 解决方案 > 取消后我应该将取消令牌设置为空吗?

问题描述

我的代码在视图模型中声明了一个取消标记,在 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 中也将其设置为 null?

标签: xamarinxamarin.forms

解决方案


由于CancellationTokenSource实现IDisposable,因此您应该在使用完CancellationTokenSource实例(在您的示例中cts)后处理它:您可以通过调用该方法直接执行此操作,也可以使用该构造Dispose间接执行此操作。using

在您的情况下,您会在致电后Dispose致电:Cancelcts

public partial class DeckTabViewModel : BaseViewModel
{
    public async Task OnDisappearingAsync()
    {
        try
        {
            cts.Cancel();
        }
        finally
        {
             if(cts != null)
             {
                 cts.Dispose();
             }
        }
    }
}

推荐阅读