Thema: Delphi TTask parametrisieren

Einzelnen Beitrag anzeigen

peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TTask parametrisieren

  Alt 6. Jun 2019, 09:35

Aber nehmen wir mal an, ich möchte mehrere Select - Anfragen losjagen, mit (einfacher Fall)
EINEM Suchparameter, den würde ich gern in den TTask reinbringen.
Die Seitenempfehlung mit dem Closure existiert übrigens nicht.
Die Hilfe, die Embarcadero anbietet, ist unter aller Kanone.
Was ist eigentlich der Vorteil von TTask ggü TThread ?
Nebenbei, ich kann die Prozedur auch "weiter hinten" benannt definieren und dann beim Constructor einbinden:


Delphi-Quellcode:
aTask := TTask.Create (meineprozedur);
// weiter hinten
procedure meineprozedure
  begin
  WasTun;
  end;
Wenn ich ein Objekt definiere, welches die übliche Variablenausstattung hat und in sich den TTask startet, könnte ich also äußere Variablen reinbringen.
Gute Idee ?
Wenn man etwas komplexeres in einem Hintergrundtask erledigen lassen will ist es durchaus eine gute Idee, alle notwendigen Daten in ein Objekt zu packen und dann eine Methode dieses Objektes an TTask.Create zu übergeben. Dadurch sind alle Felder etc. des Objektes für die im Task laufende Methode zugänglich und man kann z. B. auch die Ergebnisse im Objekt ablegen. Man muss nur darauf achten, dass das Objekt auch am Leben bleibt bis der Task damit durch ist.

TTask vs TThread:
Der Vorteil bei einem TTask ist halt, dass man sich um den ausführenden Thread keine Gedanken machen muss, der kommt aus einem Threadpool innerhalb der RTL. Leider ist das auch der größte Nachteil: man hat keine Kontrolle darüber, welcher Thread den Task ausführt, und das kann durchaus ein Problem sein, insbesondere bei Interaktionen mit einer Datenbank. Eine DB Connection/Session ist meist an den Thread gebunden, der sie erzeugt hat. Das kann man durchaus handeln, wenn man sich selbst einen TThread-Abkömmling baut, aber mit TTasks funktioniert das kaum.
Peter Below
  Mit Zitat antworten Zitat