Тайм-аут TcpClient BeginConnectC#

Место общения программистов C#
Ответить
Anonymous
 Тайм-аут TcpClient BeginConnect

Сообщение Anonymous »

Как можно установить собственный тайм-аут для асинхронного вызова BeginConnect в C#?
Это очень полезно при подключении к хосту с вероятностью не прослушивания данного порта. Каждый такой вызов тратит около 15 секунд времени, прежде чем освободить поток.

У меня есть следующий код, как рекомендуется во многих ответах на stackoverflow:

Код: Выделить всё

public bool Test()
{
using (var tcp = new TcpClient())
{
var c = tcp.BeginConnect(IPAddress.Parse("8.8.8.8"), 8080, null, null);
var success = c.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(1));

if (!success)
{
Console.WriteLine("Before cleanup");
tcp.Close();
tcp.EndConnect(c);
Console.WriteLine("After cleanup");
throw new Exception("Failed to connect.");
}
}

return true;
}
Однако это не работает. Действительно, после вызова функция входит в переключатель «if», но сразу же блокируется при вызове tcp.Close() и ждет упомянутых 15 секунд. Можно ли как-то этого избежать?

Подробнее здесь: https://stackoverflow.com/questions/281 ... ct-timeout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»