Ho un'attività che esegue un ciclo e ritarda per un intervallo ogni iterazione. Una volta che lo CancellationTokenSource
chiama Cancel()
voglio il mio codice principale a Wait()
per il Task.Delay(interval)
per finire e l'attività per uscire dal ciclo prima che il mio codice continui. Pensavo che questo codice avrebbe funzionato, ma non è così.Perché questa attività non finisce prima che il mio codice superi il comando di attesa
Invece il mio codice principale passa il t.Wait()
prima che il Loop esca. Perché?
principale Metodo Codice:
var cts = new CancellationTokenSource();
CancellationToken ct = cts.Token;
var t = Task.Run(() => { MyLoopTask(200, ct); });
// Prepare information
cts.Cancel();
t.Wait();
// Send Information
Task Codice
private async Task MyLoopTask(int interval, CancellationToken cancelToken)
{
while (!cancelToken.IsCancellationRequested)
{
Debug.Print(" Still In Loop ");
// Do something
await Task.Delay(interval);
}
Debug.Print(" cancelled ");
//Clean up
}
Messaggio per '' cts' e ct' – dotctor
Mi piacerebbe vedere più del codice del metodo principale per capire cosa sta succedendo. –
è abbastanza grande, cercherò di analizzarlo in modo significativo. –