尝试实现连接到服务器的超时参数,但我运气不太好。这是我的代码:
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!");
}
不幸的是,如果Timeoutims大于1022,则在此行引发AggregateException:
bool taskCompleted = connectTask.Wait(timeoutInMS);
调整tcpclient的超时属性似乎没有任何区别。
最佳答案
很可能是因为Task
在1022ms内还没有产生结果,但是等待的时间稍长,任务能够捕获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
?关于c# - 为什么等待此任务1022毫秒可以正常工作,但1023会导致AggregateException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7735129/