当前位置: 首页 > 编程语言 > C#

CancellationTokenSource与Task循环退出的退出标志之间的区别分享

时间:2023-04-10 11:41:37 C#

C#学习教程:TaskLoopExit的CancellationTokenSource和ExitFlag的区别;任务循环任务;voidStartLoop(){cancellationTokenSource=newCancellationTokenSource();loopTask=Task.Factory.StartNew(Loop,TaskCreationOptions.LongRunning);)休息;线程.产量();}}voidStopLoop(){cancellationTokenSource.Cancel();循环任务=空;cancellationTokenSource=null;}退出标志:volatileboolexitLoop;任务循环任务;voidStartLoop(){exitLoop=false;loopTask=Task.Factory.StartNew(Loop,TaskCreationOptions.LongRunning);}voidLoop(){while(true){if(exitLoop)break;线程.产量();}}voidStopLoop(){exitLoop=true;循环任务=空;对我来说使用CancellationTokenSource没有意义,顺便问一下,为什么可以将取消令牌作为参数添加到任务工厂?非常感谢您的任何回答上面最好的ragardsteamol案例是C#学习教程:CancellationTokenSource和Task循环退出的退出标志的区别。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——使用CancellationToken可以让token处理所有必要的同步,这样大家就不用费心了。当任务因为创建时使用的令牌被标记为已取消而出错时,它会将任务的状态设置为已取消而不是出错。如果您使用布尔值(并且不抛出),任务实际上将被标记为成功完成,即使它实际上已被取消。与布尔值不同,它是一种引用类型,因此可以从其他地方传递和取消(或检查)对CTS的引用。这很关键,因为这些位置不需要像布尔字段那样耦合在一起;决定何时取消操作的代码和对取消做出反应的任何代码都不需要相互了解。这允许更大的模块化、抽象、更高级别的功能,而不是针对个别情况等。它为代码增加了增强的语义。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: