Indy sincronizar ServerTCPExecute

Estou usando o componente TIDTCPServer. Como eu entendi eventoServerTCPExecute(AContext: TIdContext) não está sincronizado. Qual é a melhor maneira de sincronizar isso? Preciso que os dados sejam enviados para o thread principal e voltem a formatar a resposta.

Estou usando o Indy 10.5.8.0.

Método 1

É algo assim que eu deveria lidar com seções críticas para passar dados de função não sincronizada para aplicação?

var data:string;
.
.
.
procedure MainThreadProcedure;
begin
  ...
end;
.
.
.
procedure IdTCPServerExecute(AContext: TIDContext);
var tmp: string;
begin
.
.
.
EnterCriticalSection(cs);
data:= tmp;
TIdYarnOfThread(AContext.Yarn).Thread.Synchronize(MainThreadProcedure);
LeaveCriticalSection(cs);
end;

questionAnswers(2)

yourAnswerToTheQuestion