10
Mi chiedevo se c'è qualche differenza tra finire compito ciclo con CancellationTokenSource e uscire bandieraDifferenza tra CancellationTokenSource e bandiera di uscita per l'uscita del ciclo Task
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;
}
Exit bandiera:
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;
}
Per me non è possibile sance to use CancellationTokenSource, btw c'è qualche ragione per cui il token di cancellazione può essere aggiunto come parametro alla factory Task?
Grazie mille per qualsiasi tipo di risposta.
Vi ringrazio teamol
Potresti fornirmi un esempio di utilizzo corretto di TaskCancelation? Quindi lo stato delle attività cambia dall'esecuzione? E come otterresti Token che è stato passato a startnew metodo? – Teamol
@Teamol 'Run',' StartNew' e 'ContinueWith' hanno tutti i parametri per un token di cancellazione. Passa uno dentro. – Servy