¿Cómo puedo capturar variables por un método anónimo cuando lo uso en OTL?

Lo que quiero hacer:

Tengo algunos objetos en una lista genrica. Quiero capturar cada uno de estos objetos en un método anónimo y ejecutar este método como una tarea OTL separada.

Este es un ejemplo simplificado:

program Project51;

{$APPTYPE CONSOLE}

uses
  SysUtils, Generics.Collections, OtlTaskControl, OtlTask;

type
  TProc = reference to procedure;

type
  TMyObject = class(TObject)
  public
    ID: Integer;
  constructor Create(AID: Integer);
  end;

constructor TMyObject.Create(AID: Integer);
begin
  ID := AID;
end;

var
  Objects: TList<TMyObject>;
  LObject: TMyObject;
  MyProc: TProc;
begin
  Objects := TList<TMyObject>.Create;
  Objects.Add(TMyObject.Create(1));
  Objects.Add(TMyObject.Create(2));
  Objects.Add(TMyObject.Create(3));
  for LObject in Objects do
  begin
    //This seems to work
    MyProc := procedure
    begin
      Writeln(Format('[SameThread] Object ID: %d',[LObject.ID]));
    end;
    MyProc;
    //This doesn't work, sometimes it returns 4 lines in console!?
    CreateTask(
      procedure(const Task: IOmniTask)
      begin
        Writeln(Format('[Thread %d] Object ID: %d',[Task.UniqueID, LObject.ID]));
      end
    ).Unobserved.Run;
  end;
  Sleep(500); //Just wait a bit for tasks to finish
  Readln;
end.

Y este es el resultado:

Como puede ver, la captura parece funcionar bien en el hilo principal. Sin embargo, no sé si se ha capturado un puntero a un objeto o solo su campo de ID.

Cuando intento capturar el objeto y pasar el método anónimo aCreateTask&nbsp;Las cosas de la función se vuelven raras.

En primer lugar, solo la tercera instancia deTMyObject&nbsp;Parecía ser capturado. En segundo lugar, tengo cuatro mensajes en el registro de la consola a pesar de que solo tengo tres objetos en la lista genérica. El segundo comportamiento es inconsistente, a veces tengo tres mensajes en la consola, a veces tengo cuatro.

Explíqueme la razón de los dos problemas mencionados anteriormente y proponga una solución que elimine el problema y me permita pasar cada instancia de objeto a una tarea OTL separada. (No quiero usar regularTThread&nbsp;clase.)