我使用 Indy 进行 TCP 通信(D2009,Indy 10)。
在评估客户请求后,我想将答案发送给客户。因此,我像这样存储 TIdContext(伪代码)
procedure ConnectionManager.OnIncomingRequest (Context : TIdContext);
begin
Task := TTask.Create;
Task.Context := Context;
ThreadPool.AddTask (Task);
end;
procedure ThreadPool.Execute (Task : TTask);
begin
// Perform some computation
Context.Connection.IOHandler.Write ('Response');
end;
但是,如果客户端在请求和准备发送的答案之间的某个地方终止连接怎么办?如何检查上下文是否仍然有效?我试过
if Assigned (Context) and Assigned (Context.Connection) and Context.Connection.Connected then
Context.Connection.IOHandler.Write ('Response');
但这无济于事。在某些情况下,程序只是挂起,如果我暂停执行,我可以看到当前行是带有 if 条件的行。
这里会发生什么?如何避免尝试使用死连接发送?