Einzelnen Beitrag anzeigen

TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.205 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Prüfen auf ITask.Status

  Alt 5. Jan 2021, 12:36
Was heißt "nicht auf Status zugreifen können"? Wenn er noch nicht gestartet wurde ist er entweder TTaskStatus.Created oder TTaskStatus.WaitingToRun .

"Warten bis der Task beendet ist" entspricht WaitFor(..) :


Delphi-Quellcode:
const
   runningStates = [TTaskStatus.Running, TTaskStatus.WaitingForChildren];
begin
   if Assigned(asyncRefreshTask) then
      begin
         asyncRefreshTask.Cancel();
         try
            if (asyncRefreshTask.Status in runningStates) then
               asyncRefreshTask.Wait(delayTimeMs);
         except
            // make a smug face
         end;
         asyncRefreshTask := nil;
      end;
end;
Prüfen mit Assigned ist natürlich eine Lösung, da hast recht.
Wait nach Cancel liefert: EOperationCancelled with message 'Vorgang abgebrochen'. Wait wartet nur auf nicht abgebrochene Tasks. Dein
Try/Except schluckt diese Exception.
Und: Sobald Cancel aufgerufen wird, ist der Status des Tasks Canceled.

Geändert von TigerLilly ( 5. Jan 2021 um 12:46 Uhr)
  Mit Zitat antworten Zitat