繁体   English   中英

System.dll中的StackOverflowException

[英]StackOverflowException in System.dll

所以这里我的C#代码有问题。它正在重复一个接受新连接的线程但是几分钟后它在System.dll中得到StackOverflowException

这是我的代码

void DoReceive(SocketAsyncEventArgs args)
{
    var client = (TCPClient)args.UserToken;
    System.Threading.Thread.Sleep(10);
    if (!client.socket.ReceiveAsync(args))
    {
        //System.Threading.Thread.Sleep(10);
        DoReceive(args);
    }
}

无休止的递归导致StackOverflowException 考虑更改代码:

void DoReceive(SocketAsyncEventArgs args)
{
    var client = (TCPClient)args.UserToken;        
    while (!client.socket.ReceiveAsync(args))
    {
        System.Threading.Thread.Sleep(10);
    }
}

DoReceive反复调用if!client.socket.ReceiveAsync(args)然后如果这个结果没有改变会引发StackOverflowException

Olexander一样的想法

void DoReceive(SocketAsyncEventArgs args)
 {   
    var client = (TCPClient)args.UserToken;        
    while (!client.socket.ReceiveAsync(args))
     {
       System.Threading.Thread.Sleep(100);
     }
}

每次ReceiveAsync返回false时,都会递归调用DoReceive。 看起来ReceiveAsync经常返回false,导致程序内存不足。

来自MSDN

[StackOverflowException]“在执行堆栈溢出时抛出,因为它包含太多嵌套方法调用”


您可以设置静态变量以保持重试次数,并在达到限制后退出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM