我们在测试环境中运行的应用程序中看到了此异常。使用 dockerized Postgres 实例本地不会出现此问题。
Npgsql.NpgsqlException (0x80004005): The connection pool has been exhausted, either raise 'Max Pool Size' (currently 100) or 'Timeout' (currently 50 seconds) in your connection string. ---> System.TimeoutException: The operation has timed out. at Npgsql.PoolingDataSource.<Get>g__RentAsync|34_0(NpgsqlConnection conn, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken) at Npgsql.NpgsqlConnection.<Open>g__OpenAsync|42_0(Boolean async, CancellationToken cancellationToken) at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
builder.Services.AddNpgsqlDataSource
await using NpgsqlCommand command = this.dataSource.CreateCommand(..)
执行,连接不会手动打开。BackgroundService
我从错误中不确定这是否是基础设施问题,并且驱动程序无法在超时设置内打开连接(鉴于错误不是恒定的并且增加超时不会实现任何目标,这似乎不太可能)或者连接池是由于连接未正确处理而耗尽。考虑到我们不直接处理连接并按照文档注入数据源,这似乎也不太可能。如果属实,我希望在本地也能看到错误。
在健康检查班发现的,没有使用的流浪
ExecuteReaderAsync()
。