[英]What is the default timeout for Task.Wait
我已经创建了一个使用Task.Wait的Web应用程序。 在使用它后不久,大约30天后,我的应用程序便缓慢爬网。 我从未发现原因,但我怀疑如果远程服务器从不响应,则Task.Wait方法永远不会超时。 只想知道Task.Wait是否被执行,它将永远等待远程服务器永不响应吗?
从Reference Source查看源代码 ,如果Task.Wait()
的代码Task.Wait()
:
public void Wait()
{
#if DEBUG
bool waitResult =
#endif
Wait(Timeout.Infinite, default(CancellationToken));
#if DEBUG
Contract.Assert(waitResult, "expected wait to succeed");
#endif
}
因此,超时为Timeout.Infinite
!
如果您不指定超时, Task.Wait
永远等待。 启动任务时指定超时。 例如,执行HTTP请求的API通常允许您配置超时。
大约30天后,我的应用程序开始缓慢爬行
您可能应该问这个问题,并提供有关该问题的详细信息。 不过, Task.Wait
并不是问题。 如果有的话,那就是任务本身。 没有等待。
您是否尝试过使用Task.Wait的重载? 据我了解,Task.Wait将永远等待。 https://msdn.microsoft.com/zh-cn/library/system.threading.tasks.task.wait(v=vs.110).aspx
默认情况下, Task.Wait
将无限期等待。
类型:System.TimeSpan一个TimeSpan,它表示要等待的毫秒数,或者一个TimeSpan,它表示要无限期等待的-1毫秒。
这就是Microsoft Developer Network对该方法的说明。 它还表明线程将等待以下之一:
- 任务成功完成。
- 任务本身被取消或引发异常。 在这种情况下,您将处理AggregateException异常。 的
AggregateException.InnerExceptions属性包含有关以下内容的详细信息
一个或多个例外。- 经过超时定义的时间间隔。 在这种情况下,当前线程将继续执行,并且该方法返回false。
该文档可在此处找到。
public bool Wait(
TimeSpan timeout
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.