Из-за повторных вызовов new следующий код может вызвать исключение переполнения стека, если оставить его как есть:
async void Connect()
{
try
{
client = new TcpClient(ip, port);
}
catch (Exception e)
{
HandleException(e); // Most likely will be a SocketException e.g. connection refused
Connect(); // Try to connect again
}
}
Хотя я могу уменьшить вероятность этого например, добавив максимальное количество попыток перед тем, как отказаться от рекурсии и выйти из нее, я бы лучше записал ее, чтобы освободить память и исключений переполнения стека не возникало. l oop, но я думаю, что возникнет та же проблема, например,
while (!connected)
{
try
{
client = new TcpClient(ip, port);
connected = true;
}
catch (Exception e)
{
HandleException(e);
}
}
Есть ли лучший способ избежать исключений переполнения стека, кроме как иметь произвольно заданное максимальное количество повторений?