Task.Wait的默认超时是多少

时间:2015-09-21 14:43:45

标签: c#

我创建了一个使用Task.Wait的Web应用程序。使用它后不久,我的应用程序在大约30天后慢慢爬行。我从来没有发现原因,但我怀疑它是Task.Wait方法,如果远程服务器永远不会响应,它永远不会超时。只是想知道Task.Wait是否被执行会永远等待远程服务器从不响应吗?

4 个答案:

答案 0 :(得分:7)

查看来自Reference Source的来源,如果来自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

答案 1 :(得分:1)

如果您没有指定超时,

Task.Wait将永远等待。启动任务时指定超时。例如,执行HTTP请求的API通常允许您配置超时。

  

我的应用程序在大约30天后慢慢爬行

你可能应该问一个关于这个问题的详细信息。但Task.Wait不是问题所在。如果有的话,这就是任务本身。不是等待。

答案 2 :(得分:0)

您是否尝试过使用Task.Wait的重载?据我了解,Task.Wait将永远等待。 https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.wait(v=vs.110).aspx

答案 3 :(得分:0)

默认情况下,Task.Wait将无限期等待。

  

类型:System.TimeSpan表示数字的TimeSpan   等待的毫秒数,或表示-1毫秒的TimeSpan   无限期地等待。

这就是Microsoft Developer Network对该方法的陈述。它还表明线程将等待以下之一:

  
      
  • 任务成功完成。
  •   
  • 任务本身被取消或引发异常。在这种情况下,您将处理AggregateException异常。该
      AggregateException.InnerExceptions属性包含有关
    的详细信息   例外情况。
  •   
  • 超时定义的时间间隔过去了。在这种情况下,当前线程恢复执行,方法返回false。
  •   

可以找到文档here

public bool Wait(
     TimeSpan timeout
)