我正在编写一个应用程序,它会轮询postgresql DB以检查由另一个应用程序插入的新行。大多数时候一切都有效,但偶尔会出现一些问题。#34;挂起"。即使数据库中存在较新的记录,应用程序也会读取第二行。
通过以下代码实现轮询
while (!cancellationToken.IsCancellationRequested) {
try {
var lastRow = await RetreiveLastRow();
Logger.Trace($"Last row id = {lastRow.Id}");
// rest of code...
} catch (Exception e) {
Logger.Error(e, "Error");
}
await Task.Delay(TimeSpan.FromMilliseconds(100));
}
上面的方法每隔~100ms在循环中调用。
{{1}}
我确信数据库中有更新的记录。我可以用PgAdmin看到它,但我的应用程序看不到我看到的内容。
当另一行添加到表中时,一切都恢复正常 - 应用程序看到最新数据(一段时间)。一段时间后,当新记录添加到表中时,问题会重新出现。
我怀疑查询结果是由驱动程序缓存的,并且不会从db刷新。所以我尝试通过添加" polling = false"来关闭连接轮询。连接字符串(如果有的话,应该禁用缓存)。它似乎解决了这个问题,但我并不完全确定。
这真的是缓存问题吗?如果是,可以在不关闭连接轮询的情况下解决吗?