xamarin - 取消后我应该将取消令牌设置为空吗?
问题描述
我的代码在视图模型中声明了一个取消标记,在 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?
解决方案
由于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();
}
}
}
}
推荐阅读
- c# - 使用所有值减去一些值检查对象中的重复项
- python - Python- 带有 Statsmodels 的 ARMA 样本内预测函数
- java - 使用 Jackson 将 json 字符串转换为通用 Map
- node.js - Twiml Connect 方法问题
- xml - Odoo 11 自定义报告
- bash - PHP Curl 转换为 Bash Curl 问题
- image - Swift 5 Migration 已更改圆形图像
- r - Optim 函数返回错误的解决方案
- c# - 访问 Servicestack 请求和响应过滤器属性中的 JWT 令牌中的有效负载
- node.js - 如何对存储桶聚合阶段的输出进行排序?