TIdNotify与TIdSync有什么区别?

use*_*184 3 delphi indy10

我很难理解IDSYNC和IDNOTIFY之间的真正区别,对于我编写的代码行,什么意味着同步/异步?

procedure TForm1.IdTCPServerExecute(AContext: TIdContext);
begin
    ....
    DoSomeThing (TIDNotify)    ....

    DoSomethingOther(TIDsync) ......

 end; 
Run Code Online (Sandbox Code Playgroud)

为什么我不确定这两行代码是否在TCPServer Execute函数中执行?是否存在在我的TIDSynfunction中没有执行几行代码或者如何解释Deadloack的风险?

Rem*_*eau 9

TIdSync和TIdNotify实现了相同的目标 - 在主线程的上下文中执行一段代码 - 但它们以不同的方式执行.

TIdSync是同步的.该TIdSync.Synchronize()方法阻塞调用线程,直到主线程调用该TIdSync.DoSynchronize()方法并且它已退出为止.如果TIdSync.Synchronize()在主线程关闭该服务器时在服务器事件处理程序中调用死锁,则可能发生死锁.这是因为主线程被阻塞,等待服务器终止其线程.但是线程被阻塞,等待主线程处理同步请求.

TIdNotify是异步的.该TIdNotify.Notify()方法将该方法添加TIdNotify.DoNotify()到后台队列并立即退出,因此不会阻止调用线程.主线程TIdNotify.DoNotify()在闲暇时调用该方法.在这种情况下没有僵局.