Delphi-处理rest服务器异步调用中引发的异常引起的UI影响

Delphi-处理rest服务器异步调用中引发的异常引起的UI影响,rest,delphi,asynchronous,livebindings,Rest,Delphi,Asynchronous,Livebindings,我在UI表单上开发的系统中有一个常见的习惯用法,它使用绑定到TObjectList的DelphiLiveBindings。前端是Delphi,使用TRESTRequest.ExecuteAsync()对REST服务器进行异步方法调用。对于插入/更新/删除活动,我将代码放在BindSourceAdapter.OnListInsert/OnListDelete/etc事件处理程序中执行rest调用 我遇到的问题是,这些事件处理程序似乎期望得到一个只有通过同步调用才能知道的响应。例如,OnListDe

我在UI表单上开发的系统中有一个常见的习惯用法,它使用绑定到TObjectList的DelphiLiveBindings。前端是Delphi,使用TRESTRequest.ExecuteAsync()对REST服务器进行异步方法调用。对于插入/更新/删除活动,我将代码放在BindSourceAdapter.OnListInsert/OnListDelete/etc事件处理程序中执行rest调用

我遇到的问题是,这些事件处理程序似乎期望得到一个只有通过同步调用才能知道的响应。例如,OnListDelete将实现者设置为“ADeleted”,以指示该项是否已从ObjectList中删除

在下面的代码示例中,我现在正在对这个问题挥手,因为我不知道正确的处理方法。但是“DeleteConnector”包含异步调用,用于调用mod资源,并在收到响应之前返回。在主线程中,它返回PDQ,但删除可能会失败,例如,因为DB约束

保持绑定UI列表与后端状态同步的正确方法是什么

procedure TCNSConnectorFrame.ConnectorListOnDelete
  (Sender: TBindSourceAdapter; AIndex: Integer;
  var AHandled, ADeleted: Boolean);
begin
   AHandled := true;
   ADeleted := true;

   DeleteConnector;


end;
我可以通过将POST/PUT/DELETE调用切换为blocking调用来下注。 我可以通过切换到非LiveBindings实现来进行punt,从而对UI状态进行更精细的控制

在我采取这种行动之前,我想确保我没有忽视一些基本的东西。我对多线程编码相当陌生

这里有史以来第一个问题,但长期潜伏者。蒂亚