gpt4 book ai didi

c# - Task.Run 支持取消

转载 作者:太空狗 更新时间:2023-10-30 00:40:21 25 4
gpt4 key购买 nike

考虑 this Task.Run example .它展示了如何创建具有取消支持的任务。

我正在做类似的事情:

Task.Run(()=>{while (!token.IsCancellationRequested()) {...}}, token);

我的问题:

  1. 既然我已经有了对取消标记的引用,为什么还要将它作为参数传递给 Task.Run 调用?

  2. 我经常在例子中看到如下代码:

    if (token.IsCancellationRequested) token.ThrowIfCancellationRequested();

这段代码的目的是什么?为什么不直接从方法中返回

最佳答案

  1. 如果您将取消 token 传递给 Task.Run,如果 token 在任务启动之前被取消,它将永远不会启动以节省您的资源(我的意思是不创建线程等)。

  2. 如果您只是从方法返回,任务的状态将不是Canceled,而是RanToCompletion。显然这不是您所期望的。

或者,您可以将 CancellationToken 作为参数抛出 OperationCanceledException,这将使 Task.Status 变为 Canceled,但这是困难而冗长的方式。 token.ThrowIfCancellationRequested 简洁。

您可以简单地使用 token.ThrowIfCancellationRequested();,无需检查 token.IsCancellationRequestedThrowIfCancellationRequested 方法已经这样做了。

关于c# - Task.Run 支持取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28557506/

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