繁体   English   中英

CancellationTokenSource和Task循环退出的退出标志之间的区别

Difference between CancellationTokenSource and exit flag for Task loop exit

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我想知道使用CancellationTokenSource结束循环任务和退出标志之间是否有任何区别

CancellationTokenSource:

CancellationTokenSource cancellationTokenSource;
Task loopTask;

void StartLoop()
{
    cancellationTokenSource = new CancellationTokenSource();
    loopTask = Task.Factory.StartNew(Loop, TaskCreationOptions.LongRunning);
}

void Loop()
{
    while (true)
    {
        if (cancellationTokenSource.IsCancellationRequested)
            break;

        Thread.Yield();
    }
}

void StopLoop()
{
    cancellationTokenSource.Cancel();

    loopTask = null;
    cancellationTokenSource = null;
}

退出标志:

volatile bool exitLoop;
Task loopTask;

void StartLoop()
{
    exitLoop = false;
    loopTask = Task.Factory.StartNew(Loop, TaskCreationOptions.LongRunning);
}

void Loop()
{
    while (true)
    {
        if (exitLoop)
            break;

        Thread.Yield();
    }
}

void StopLoop()
{
    exitLoop = true;

    loopTask = null;
}

对我而言,使用CancellationTokenSource并没有任何意义,顺便说一句,为什么有任何理由可以将取消标记作为参数添加到Task factory?

非常感谢您的任何回答。

最好的ragards teamol

1 个回复
  1. 使用CancellationToken可使令牌处理所有必要的同步,因此您不必考虑它。
  2. Task由于在其创建中使用的令牌被标记为“已取消”而发生故障时,会将Task的状态设置为“已取消”,而不是发生故障。 如果您使用布尔值(并且不抛出),则该任务实际上会被标记为已成功完成,即使实际上已将其取消。
  3. 与布尔类型不同,它是引用类型,因此可以传递对CTS的引用,并从其他位置取消(或检查)该引用。 关键在于这些位置不需要像使用布尔型字段时那样将它们耦合在一起。 决定何时取消操作的代码或对取消做出任何反应的代码都不需要彼此了解。 这样可以实现更大的模块化,抽象化,更高级别的功能(并非特定于特定情况)等。
  4. 它为代码添加了增强的语义。
2 python中退出和退出之间的区别

有人会告诉我内置函数exit()和quit()之间有什么区别。 如果我错了,请纠正我。 我试过检查它,但我没有得到任何东西。 1)当我为每一个使用help()和type()函数时,它表示两者都是类Quitter的对象,它在模块site定义。 2)当我使用id()检查每个地址时 ...

3 退出和注销之间的区别

不确定它与VxWorks或rlogin有关,但无论如何。 我读过一个永远不应该使用exit命令退出VxWorks rsh shell,而只logout命令。 但是我似乎无法找到解释。 这两个命令有什么区别? 谢谢。 ...

4 “||”之间的区别退出/b”和“|| 退出 /b !errorlevel!”

我们有一堆.bat构建脚本,这些脚本由基于 PowerShell 的 GitLab 运行程序调用,这些脚本最近从以下内容重构: 更简洁: 今天我调查了一个构建作业,如果您查看错误日志,该作业显然失败了,但报告为成功。 经过大量实验,我发现这种模式并不总是按预期工作: 但是当前者没有时,这 ...

5 关闭MATLAB后,退出和退出之间有什么区别?

我一直在使用quit命令关闭MATLAB。 但是,最近我发现exit是相同的,只是它保存了Editor window ,这对我真的很有帮助。 MATLAB的exit帮助说明: It performs the same as quit and takes the same termin ...

2014-10-27 06:17:23 1 643   matlab
7 退出for循环

我知道我在这里遗漏了一些非常简单的东西。。。。但是我不能指责它。 我的代码试图在“数字”中查找项目的除数。 当计数达到10时,我知道我发现数字中的第一个项具有10个除数...但是我看不到退出循环。 它只是继续打印具有10个或更多除数的数字。 我以为是缩进,但没有。 然后,我将计 ...

8 退出循环

我的for循环产生斐波那契数列。 我希望我的for循环在超过4000000时停止。 这是我所拥有的: 这将返回以下内容 [1、2、3、5、8、13、21、34、55、89、144、233、377、610、987、1597、2584、4181、6765、10946、17711 ...

9 设置标志时线程中的循环不退出

我试图通过设置一个标志退出Java(JNA)的消息循环,但是它不起作用。 这是我的代码: 方法quit()在代码中其他地方发生的回调中调用。 消息Entered quit()! 屏幕上显示,但是消息Exited message loop! 不会,线程继续运行。 当我 ...

10 pyOptSparseDriver中的退出标志

如果出现故障,我需要能够指定退出标志。 对于该OpenMDAO文档pyoptsparse_driver有一个出口标志的选项。 但是,当我将退出标志作为选项运行时,它表示Option 'exit_flag' has not been added 。 另外我也不确定如何实际指定是否失败。 我 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM