.net BeginAcceptTcpClient保持,.不返回函数

7vux5j2d  于 2023-05-02  发布在  .NET
关注(0)|答案(1)|浏览(188)

这是我的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次出现这种情况

  1. AsyncCallback功能延迟5秒
    我不知道为什么BeginAcceptTcpClient不返回
utugiqy6

utugiqy61#

我猜你没有终止这个连接,你需要在回调代码中调用这个函数。TcpListener。EndAcceptTcpClient(IAsyncResult)https://learn.microsoft.com/en-us/dotnet/api/system.net.sockets.tcplistener.endaccepttcpclient?view=net-7.0

相关问题