我有这样的应用程序:
我有一个应用程序,其中一部分代码在一个带有定时器延迟的循环中运行。在申请开始时我宣布:
public static CancellationTokenSource tokenSource1 = new CancellationTokenSource();
public static bool Timer1Running;
这是循环区域:
while (App.runCardTimer && App.TimerSeconds > 0)
{
App.Timer1Running = true;
…
try
{
await Task.Delay(1000, App.tokenSource2.Token);
}
catch (TaskCanceledException ex) { }
App.TimerSeconds--;
App.Timer1Running = false;
}
我的应用程序响应屏幕上的点击,如下所示:
wordGrid.GestureRecognizers.Add(
new TapGestureRecognizer()
{
Command = new Command(() =>
{
App.TimerSeconds = 0;
if (App.tokenSource1 != null && App.Timer1Running)
{
App.tokenSource1.Cancel();
}
})
});
我对取消令牌感到困惑。一旦我发表声明:
App.tokenSource1.Cancel();
我是否需要创建一个新的取消令牌:
tokenSource1 = new CancellationTokenSource();
或者我可以继续重复使用吗?
答案 0 :(得分:3)
如果要重置取消令牌的状态,则无法执行此操作。您必须重新创建CancellationTokenSource
。
答案 1 :(得分:2)
CancellationToken
以及任务是一次性实体,应在使用后丢弃。
你的基本方法是:
CancellationTokenSource
;