gpt4 book ai didi

c# - 当我使用 CancellationTokenSource 时,我是传递对它的引用还是对 CancellationTokenSource.Token 的引用?

转载 作者:太空宇宙 更新时间:2023-11-03 18:02:03 26 4
gpt4 key购买 nike

这是我正在使用的代码。我想要的是当屏幕出现时,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
}
}

最佳答案

经验法则是:

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

  • 这就是为什么大多数 API 代码只接受 CancellationToken - 它不需要主动取消 token 本身,它只需要注意它何时被其他东西取消。

    所以在你的情况下, OnDisappearing需要访问 CancellationTokenSource , 但是 GetWork可能只需要 CancellationToken . (我不清楚你为什么在 catch block 中调用 Cancel,但你可能不需要。)

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

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com