Tea*_*mol 10 .net c# task exit cancellationtokensource
我想知道结束循环任务与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;
}
Run Code Online (Sandbox Code Playgroud)
退出标志:
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;
}
Run Code Online (Sandbox Code Playgroud)
对我来说,使用CancellationTokenSource没有任何意义,顺便说一下,为什么取消令牌可以作为参数添加到任务工厂?
非常感谢您的任何答案.
最好的ragards teamol
Ser*_*rvy 11
CancellationToken允许令牌处理所有必要的同步,因此您不必考虑它.Task由于其创建中使用的令牌导致的错误被标记为已取消时,它会将取消的状态设置Task为取消,而不是出现故障.如果使用布尔值(并且不抛出),则任务实际上将被成功标记为已完成,即使它实际已被取消.| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |