这是我的C#源代码。NET Framework v4.5.2:
private void Accept(){
Log("Start Accept");
listener.BeginAcceptTcpClient(new AsyncCallback(connection), null);
Log("Finish Accept")
}
private void connection(IAsyncResult res){
try{
//
//Check Disposed Logic
//
using (TcpClient tcpClient = _listener.EndAcceptTcpClient(res))
{
Accept();
Stream stream = GetStream(tcpClient);
ConnectionDetails connectionDetails = GetConnectionDetails(stream, tcpClient);
using (IService service = _serviceFactory.CreateInstance(connectionDetails))
{
// do something
service.Respond()
}
}
}
}
BeginAcceptTcpClient
函数中未写入并保存“Finish Accept”日志,但连接AsyncCallback
工作正常,连接成功。
这种情况平均每70次中会出现1次,而且只在我重新启动计算机时出现。
当我简单地运行程序时,即使我运行500次,它也不会发生。
1.重新启动并延迟启动程序1。30分钟~ 5分钟-〉17次中有1次出现这种情况
AsyncCallback
功能延迟5秒
我不知道为什么BeginAcceptTcpClient
不返回
1条答案
按热度按时间utugiqy61#
我猜你没有终止这个连接,你需要在回调代码中调用这个函数。TcpListener。EndAcceptTcpClient(IAsyncResult)https://learn.microsoft.com/en-us/dotnet/api/system.net.sockets.tcplistener.endaccepttcpclient?view=net-7.0