我可以在 TIdTCPServer.OnExecute 事件中使用 Exit

Can I use Exit in TIdTCPServer.OnExecute event

我可以在 TIdTCPServer.OnExecute 事件中添加队列命令后使用退出吗?

if condition then
begin
  MyNotify          := TMyNotify.Create;
  MyNotify.FMyData  := Format('%s > %d > %s, [TimeToStr(Now), AContext.Connection.Socket.Binding.Handle, AContext.Binding.PeerIP]);
  MyNotify.Notify;

  Con.Queue.Add('DCCUSTOMER');
  exit;
end;

还是会造成死锁,或者其他问题?

是的,您可以在 TIdTCPServer.OnExecute 事件处理程序中使用 Exit

OnExecute 事件在 TCP 连接的生命周期内连续循环触发。从 OnExecute 处理程序退出是完全正常的,事件将再次被触发。这允许您编写更简单的处理程序代码,因为您一次只需为一个迭代编写代码。最常见的用例是读取和处理一个命令然后退出(隐式或显式,这无关紧要),当事件再次触发时重复下一个命令。

关闭套接字或引发未捕获的异常将终止循环。