Разница между 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;
}
Флаг выхода:
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, кстати, есть ли какая-либо причина, почему токен отмены может быть добавлен в качестве параметра к фабрике задач?
Большое спасибо за любой ответ.
Лучший тряпичный тандоль