在 PostgreSql 中,我编写了通用代码来通知表更新。
这样做,我必须等待连接。没有等待,我没有收到数据库的通知。所以我就这样等待:
conn.Wait(Timeout.Infinite);
我本来可以在循环中使用不带任何参数的 Wait,因为我害怕因并发而错过一些通知。例如,当两个通知同时进入时,当不带参数调用 wait 并通过接收第一个通知而释放时,我们可能会错过第二个通知(在等待状态返回之前)。所以我使用了“Timeout.Infinite”。
为了停止来自另一个线程的连接,我尝试用以下方法关闭它:
conn.Close()
但我收到一个异常:
Npgsql.NpgsqlOperationInProgressException: 'The connection is already in state 'Waiting''
所以问题是:
有没有办法让连接不再处于等待状态,同时保证等待时不丢失任何通知?
注意:我认为(仅是我的意见)PostgreSql“Connection.Wait”函数中缺少 CancellationToken。我们应该可以在等待下一次更改时取消等待。