Почему ожидание этой задачи в течение 1022 миллисекунд работает нормально, а 1023 вызывает AggregateException? - PullRequest
2 голосов
/ 12 октября 2011

Попытка реализовать параметр тайм-аута для подключения к серверу, но мне не очень повезло. Вот мой код:

client = new TcpClient();

Task task = Task.Factory.FromAsync(client.BeginConnect, client.EndConnect, host, port, null);

bool taskCompleted = connectTask.Wait(timeoutInMS);

if (taskCompleted)
{
    // Do something with the establishment of a successful connection
}
else
{
    Console.WriteLine("Timeout!");
}

К сожалению, если timeoutInMS больше 1022, в этой строке выдается исключение AggregateException:

bool taskCompleted = connectTask.Wait(timeoutInMS);

Настройка свойств тайм-аута TcpClient, похоже, не имеет никакого значения.

1 Ответ

3 голосов
/ 12 октября 2011

Скорее всего, потому что Task еще не дал результата за 1022 мс.Но в ожидании немного большего, задача смогла захватить SocketException, брошенный TcpClient.

Ваша ситуация аналогична следующей:

var task = Task.Factory.StartNew(() =>
{
  Thread.Sleep(5000);
  throw new Exception();
});

bool taskCompleted = task.Wait(4000); // No exception
bool taskCompleted = task.Wait(6000); // Exception

ПоКстати, почему вы используете FromAsync(), когда вы используете TcpClient синхронно?

...