为什么等待这个任务1022毫秒工作正常,但1023会导致AggregateException

本文关键字:1023 AggregateException 等待 任务 1022毫 工作 为什么 | 更新日期: 2023-09-27 18:10:56

尝试实现连接到服务器的超时参数,但我没有太多的运气。下面是我的代码:

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的超时属性似乎没有任何影响

为什么等待这个任务1022毫秒工作正常,但1023会导致AggregateException

很可能是因为Task在1022 ms内还没有产生结果。但等待的时间稍长,任务能够捕获TcpClient抛出的SocketException

你的情况类似如下:

var task = Task.Factory.StartNew(() =>
{
  Thread.Sleep(5000);
  throw new Exception();
});
bool taskCompleted = task.Wait(4000); // No exception
bool taskCompleted = task.Wait(6000); // Exception

顺便说一下,当您以同步方式使用TcpClient时,为什么要使用FromAsync() ?