加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 具有取消支持的Task.Run

发布时间:2020-12-15 23:22:33 所属栏目:百科 来源:网络整理
导读:考虑 this Task.Run example.它显示了如何创建具有取消支持的任务. 我正在做类似的事情: Task.Run(()={while (!token.IsCancellationRequested()) {...}},token); 我的问题: 因为我已经有了对取消令牌的引用,为什么将它作为参数传递给Task.Run调用呢? 我
考虑 this Task.Run example.它显示了如何创建具有取消支持的任务.

我正在做类似的事情:

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

我的问题:

>因为我已经有了对取消令牌的引用,为什么将它作为参数传递给Task.Run调用呢?
>我经常在示例中看到以下代码:

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

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

解决方法

>如果将取消令牌传递给Task.Run,??如果在启动任务之前取消令牌,则永远不会启动它来保存资源(我的意思是不创建线程等).
>如果你只是从方法返回,任务的状态将不会被取消,它将是RanToCompletion.显然,这不是你所期望的.

或者,您可以使用CancellationToken作为参数抛出OperationCanceledException,这将使Task.Status被取消,但这是一种艰难而冗长的方式. token.ThrowIfCancellationRequested简洁明了.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读