这个问题在这里已有答案: 退出和退货有什么区别? [重复] 4个答案 在函数中使用时, return 0和exit (0)之间有什么区别吗? 如果是,我何时应该在函数中使用return 0或exit (0) ? ...
提示:本站收集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
CancellationToken
可使令牌处理所有必要的同步,因此您不必考虑它。 Task
由于在其创建中使用的令牌被标记为“已取消”而发生故障时,会将Task
的状态设置为“已取消”,而不是发生故障。 如果您使用布尔值(并且不抛出),则该任务实际上会被标记为已成功完成,即使实际上已将其取消。 声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.