10
ich mich gefragt, ob es einen Unterschied zwischen endende Schleife Aufgabe mit CancellationTokenSource und VerlassensflagUnterschied zwischen CancellationTokenSource und Verlassensflag für Task-Loop-Ausgang
CancellationTokenSource ist:
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;
}
Verlassensflag:
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;
}
Zu mir macht es keine Sance, um CancellationTokenSource zu verwenden, gibt es irgendeinen Grund, warum Abbruch-Token als Parameter zu Task Factory hinzugefügt werden kann?
Vielen Dank für jede Art von Antwort.
Beste ragards teamol
Können Sie mir bitte ein Beispiel für die korrekte Verwendung von TaskCancelation geben? Also ändert sich der Status des Tasks vom Laufen? Und wie würdest du Token bekommen, die zu einer neuen Methode weitergegeben wurde? – Teamol
@Teamol 'Run',' StartNew' und 'ContinueWith' haben alle Parameter für ein Abbruch-Token. Pass eins rein. – Servy