为什么超时总是15秒的倍数?

问题描述 投票:0回答:1

我们希望等待 SQL Server 2022 中的数据库表发生更改,因此在我们的 C# 项目中使用 SqlDependency。这很好用,但是当我们在类的构造函数中指定超时时,它总是会向上舍入到接下来的 15 秒。我在文档中找不到任何相关信息。

我们基本上在做以下事情:

var timeoutInSeconds = 5;
var sqlDependency = new SqlDependency(mySimpleSelectCommand, $"Service=mySampleService", timeoutInseconds);
sqlDependency.OnChange += (_, args) => SampleHandler(args);
// execute command etc.

SampleHandler 将在超时时被调用(如预期)(= 未收到任何更改)。但是,这会在 15 秒后发生(而指定为 5 秒)。当我们指定20秒超时时,它将在30秒后调用。需要明确的是:这与连接超时无关,而是与“SqlDependency 未收到任何更改”超时有关。

这种行为是预期的/记录的吗?可以改变吗?这有点奇怪,因为我们想要不同的超时。

c# .net sqldependency
1个回答
0
投票

感谢 @Panagiotis Kanavos 深入挖掘 .NET 源代码并找到答案:

由于计时器实际上以 15 秒的间隔检查超时,因此超时将始终向上舍入到下一个 15 秒的倍数。

这很奇怪,因为我认为适应所传递的实际超时的更智能的实现将非常容易实现,并且

目前没有办法传递小于 15 秒的超时

© www.soinside.com 2019 - 2024. All rights reserved.