Das ist mir Zuviel Pseudocode und Zuwenig Kontext, um irgendwas sinnvolles dazu sagen zu können.
Wer ist denn der Owner von Request, Response und Client?
Kannst du dein Problem vielleicht in einen vollständigen kleinen Beispiel zip-archivieren und hochladen?
Vergesse das mal mit dem eigenen Extra-Thread.
Speichere dir den TRESTExecutionThread in eine Member-Variable und prüfe dem Empfang einfach zyklisch per TTimer.
Wenn Antwort empfangen wurde oder das Programm beendet wird, mit Cancel() abbrechen.
Owner?
RESTClient := TRESTClient.Create(sUrl);
RESTResponse := TRESTResponse.Create(RESTClient);
RESTRequest := TRESTRequest.Create(RESTClient);
Wo gibt es da Owner?
Beispiel hochladen kann ich (wie immer) nicht, da ich mich auf einen Rest-Endpunkt beziehe,
welcher bei euch nicht existiert; Body, Parameter, Header usw. enthalten sicherheitskritische Informationen, welche ich nicht posten kann.
Die Thread-Struktur enthält ja nur diese 3 (für dieses Beispiel relevante):
- Der Main-Thread welcher den Nachrichten-Tread erstellt und beim Close per
"Terminate();" beenden soll
- Der Nachrichten-Thread, welcher den Rest-Thread (wie von TiGü beschrieben) erstellt,
die Events empfangen und Nachrichten abarbeiten soll (ohne den Anwender von der Arbeit ab zu halten)
- Und der Rest-Thread, welcher ja ohnehin durch
RestThread := RESTRequest.ExecuteAsync(aCompletionHandler, False, False, aCompletionHandler2);
erstellt wird (evtl. noch weitere innen-liegende, aber davon habe ich keine Ahnung)
Auf jeden Fall kann ich davon keinen "auflösen". Die Abarbeitung der Nachrichten kann ich ja unmöglich im Main-Thread machen.
Einen Abbruch-Request? Mal sehen, ob das so geht.
Das klingt jetzt alles ein wenig negativ, hoffenlich kommt das nicht falsch rüber.
Ich forsche dann mal weiter ...
LG Incocnito