繁体   English   中英

Task.Wait的默认超时是多少?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM