среда, 20 мая 2015 г.

Таймауты

 Черт побери, почему именно 5 секунд на вызов обратной функции, Карл?!

procedure TDSClientCallbackChannelManager.Invoke(const Id: string;
  Data: TJSONValue; out Response: TJSONValue);
var
  Item: TDSCallbackItem;
  Callback: TDBXCallback;
  ExecThread: TDSExecuteThread;
begin
  TMonitor.Enter(FLocalCallbackRepo);
  try
    if FLocalCallbackRepo.TryGetValue(Id, Item) then
    begin
      Callback := Item.Callback;
      try
        TMonitor.Enter(Callback);
        ExecThread := TDSExecuteThread.Create(Callback, Data);

        if not TMonitor.Wait(Callback, 5000) then
          ExecThread.Terminate;

        Response := ExecThread.Response;

Комментариев нет: