TsgcWSCircuitBreaker › Methods › ExecuteWithResult
运行一个返回 TObject 的受保护操作,并通过 out 参数报告结果。
function ExecuteWithResult(const aKey: string; aAction: TFunc<TObject>; out aResult: TObject): Boolean;
| 名称 | 类型 | 描述 |
|---|---|---|
aKey | const string | 调用所属的断路器键,通常是主机名或逻辑服务名称。 |
aAction | TFunc<TObject> | 执行工作并返回 TObject 的匿名函数(调用方拥有返回对象的生命周期)。 |
aResult | out TObject | 成功时接收 aAction 返回的 TObject;当调用被断路器拒绝时设为 nil。 |
若操作执行成功且 aResult 携带返回值,则为 True;若因电路处于 Open 状态而拒绝调用(此时 aResult 为 nil),则为 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;