TsgcWSCircuitBreakerMethods › ExecuteWithResult

ExecuteWithResult 方法

运行一个返回 TObject 的受保护操作,并通过 out 参数报告结果。

语法

function ExecuteWithResult(const aKey: string; aAction: TFunc<TObject>; out aResult: TObject): Boolean;

参数

名称类型描述
aKeyconst string调用所属的断路器键,通常是主机名或逻辑服务名称。
aActionTFunc<TObject>执行工作并返回 TObject 的匿名函数(调用方拥有返回对象的生命周期)。
aResultout TObject成功时接收 aAction 返回的 TObject;当调用被断路器拒绝时设为 nil

返回值

若操作执行成功且 aResult 携带返回值,则为 True;若因电路处于 Open 状态而拒绝调用(此时 aResultnil),则为 False。(Boolean

备注

针对生成结果的操作的 Execute 变体。由于使用了 TFunc<TObject>,需要 Delphi 2009 或更高版本。记账方式与 Execute 相同:首先检查 IsCallAllowed,时长和结果驱动 RecordSuccess / RecordFailure / RecordSlow,异常被分类并重新引发。返回的对象由调用方拥有,使用后请释放,除非它由另一个对象拥有。被拒绝时,OnCallRejected 触发,若 Fallback.Enabled 为 True 则 OnFallback 运行;请注意 OnFallback 携带 var string 载荷,因此返回 TObject 回退值由调用方负责。

示例

var
  oReply: TObject;
begin
  if sgcWSCircuitBreaker1.ExecuteWithResult('api.openai.com',
    function: TObject
    begin
      Result := CallOpenAIReturningJSON;
    end, oReply) then
  try
    HandleReply(oReply as TsgcJSONObject);
  finally
    oReply.Free;
  end
  else
    ServeCachedReply;
end;

返回方法