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

时间:2011-10-12 04:02:40

标签: c# android android-asynctask tcpclient waithandle

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

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 个答案:

答案 0 :(得分:3)

很可能是因为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