CancellationTokenSource

CancellationTokenSource

这是我正在使用的代码。我想要的是当出现while循环内的代码出现的屏幕时。当屏幕消失时,我需要停止它。有人可以给我一些建议,我是否为此功能正确使用了CancellationTokenSource。我是否还需要同时执行.Dispose()和然后将其设置为null的行为,就像我在这里所做的那样?

protected async override void OnAppearing()
{
   cts1 = new CancellationTokenSource();
   await GetWork(cts1.Token);
}

protected override void OnDisappearing()
{
   cts1.Cancel();
   base.OnDisappearing();
}

public async Task GetWork(CancellationToken ct)
{
      while (true)
      {
         if (ct.IsCancellationRequested)
            break;
         // do work
      }
}

最佳答案

经验法则是:


任何需要取消令牌的代码都应该可以访问CancellationTokenSource
需要响应取消的任何代码都应该可以访问CancellationToken


这就是为什么大多数API代码仅接受CancellationToken的原因-它不需要主动取消令牌本身,只需要注意何时被其他对象取消即可。

因此,在您的情况下,OnDisappearing需要访问CancellationTokenSource,但是GetWork可能仅需要CancellationToken。 (我不清楚您为什么在catch块中调用Cancel,但是您可能不需要。)

关于c# - 当我使用CancellationTokenSource时,是否传递对它的引用或对CancellationTokenSource.Token的引用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54386507/

10-11 04:07