[英]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.