gpt4 book ai didi

c# - ManualResetEvent.WaitOne() 在没有超时的情况下返回 false?

转载 作者:太空狗 更新时间:2023-10-29 23:38:43 42 4
gpt4 key购买 nike

除了超时之外,还有什么会导致 ManualResetEvent.WaitOne() 返回 false

我们调用了 WaitOne(3600000),大约五分钟后返回 false

此行为仅出现在大约 300 台服务器中的一台上。我们尚未隔离该特定服务器的任何不同之处。该调用在使用 .NET 4.0 的 Windows 服务中进行。

我们使用调用的代码基本上是这样的:

 if (tracker.WaitOne(timeout)) {
Log("Success");
return;
}
Log("Timed out");
throw new Exception(...);

我们在大约五分钟后(不完全是)收到“超时”日志。

请注意超时通常不是一小时。我们延长了测试超时时间,因为它的超时时间比预期的要早。通常超时配置为十分钟。在绝大多数运行中,跟踪器在不到一秒内完成 Set(),但很少需要几分钟。

我还研究了是否有什么东西可以处理等待句柄,但它唯一被处理的地方是在它被设置之后。我还检查了在设置后关闭是否会导致等待句柄错误地返回 false,并且在我对 .NET 4 和 .NET 4.5 的测试中,等待句柄总是返回 true,即使在设置后立即调用 dispose 也是如此。

最佳答案

如果它发生在一台服务器上,并且可靠地更快超时(5 分钟而不是 60 分钟),我可能会认为该机器有某种非常奇怪的时钟问题。

老实说,除非超时已经过去,否则它不会返回 false(显然,超时不准确,但不应该太远,而且更可能是“晚”而不是“早”)和因此,要么您的断言在某种程度上是错误的,要么该服务器在硬件级别上确实存在问题。

关于c# - ManualResetEvent.WaitOne() 在没有超时的情况下返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25071023/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com