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