Не то я слона не замечаю, не то баг какой-то в FtpWebRequest затесался.
упростил код до максимума. Просто нужно долбиться на ftp-сервер, пока не получится:
static async Task GetResponse(string url)
{
int counter = 0;
while (true)
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);
request.Method = WebRequestMethods.Ftp.DownloadFile;
try
{
//var response = await request.GetResponseAsync();
var response = request.GetResponse();
response.Close();
break;
}
catch //(WebException e)
{
//e.Response.Close();
//Console.WriteLine(e.Message);
}
Console.WriteLine(++counter);
}
}
отключаю сетевое подключение или выдёргиваю провод, запускаю, попытки бегут, включаю сеть — успешная попытка соединения и всё заканчивается как должно.
Меняю синхронную версию метода GetResponse на асинхронную GetResponseAsync — получаю зависание на третьей попытке. Там лимит в 2 подключения по умолчанию, вот в него всё и упирается.
Почему-то получается соединения не освобождаются. При работе по http подобная штука была из-за незакрытого потока ответа, но тут я уже всё явно закрываю и потоков не открываю никаких.
Если сеть не отключать, то асинхронный метод нормально работает. В цикле так же сотню раз прогнать можно и ни в какой лимит ничто не упирается.