Delphi - 处理在异步调用中向休息服务器

时间:2015-12-24 02:13:14

标签: rest delphi asynchronous livebindings

我在UI表单上开发的系统中有一个共同的习惯用法,它采用绑定到TObjectList的Delphi LiveBindings。前端是Delphi使用TRESTRequest.ExecuteAsync()使用异步方法调用REST服务器。对于INSERT / UPDATE / DELETE活动,我将放置我的代码以在BindSourceAdapter.OnListInsert / OnListDelete / etc事件处理程序中执行rest调用。

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

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

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

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

   DeleteConnector;


end;

我可以将POST / PUT / DELETE调用切换到阻塞调用。 我可以通过切换到非LiveBindings实现来让我更精细地控制UI状态。

在我采取这样的行动之前,我想确保我不会忽视一些基本的东西。我对多线程编码很新。

这里有第一个问题,但很长一段时间潜伏着。 TIA。

0 个答案:

没有答案