TJson.JsonToObject <T> arroja errores en un entorno multihilo
Cuando usasTJson.JsonToObject
en un entorno multihilo se producen violaciones de acceso aleatorio. Estuve buscando por mucho tiempo el problema y pude aislarlo con el siguiente código
Clase JSON
type
TParameter = class
public
FName : string;
FDataType : string;
FValue : string;
end;
Función de prueba:
procedure Test();
var
myTasks: array of ITask;
i : integer;
max : integer;
begin
max := 50;
SetLength(myTasks, max);
for i := 0 to max -1 do begin
myTasks[i] := TTask.Create(procedure ()
var
json : string;
p : TParameter;
begin
json := '{"name":"NameOfParam","dataType":"TypeOfParam","value":"ValueOfParam"}';
p := TJson.JsonToObject<TParameter>(json);
p.Free;
end);
myTasks[i].Start;
end;
TTask.WaitForAll(myTasks);
ShowMessage('all done!');
end;
Es solo un fragmento de código basado en una fuente mucho más compleja. Mientras use este código en un solo hilo, todo funciona sin problemas. Me pregunto si hay algo mal con el código.