Я пытаюсь вызвать две функции для извлечения данных из базы данных Postgres, как SO:
shrong> someclass.cs
Код: Выделить всё
public static IDatabaseProvider DatabaseProvider { get; } = new PgDatabaseProvider();
public async Task Refresh()
{
var users = await DatabaseProvider.GetUsersAsync();
var profiles = await DatabaseProvider.GetProfilesAsync();
}
в моей реализации idatabaseprovider (
), я создаю строку подключения и npgsqldatasource , которую я использую для открытия соединений и получения данных.
Код: Выделить всё
private NpgsqlDataSource _dataSource;
public PgDatabseProvider()
{
...
_dataSource = ...//creates data source from connection string
}
public async Task GetUsersAsync()
{
var results = new List();
string query = "SELECT * FROM users";
await using (var connection = await _dataSource.OpenConnectionAsync())
await using (var cmd = new NpgsqlCommand(query, connection))
await using (var reader = await cmd.ExecuteReaderAsync())
{
while (await reader.ReadAsync())
{
...//reading data
results.Add(new User(...));
}
}
return results;
}
public async Task GetProfilesAsync()
{
...//same structure as above
}
Если я запускаю любую функцию самостоятельно, они успешны, но когда я запускаю одну, а затем другой спиной к спине, npgsql бросает Timeoutexception: Timeout во время попытки чтения на самую первую попытку executeReaderasync () во второй функции. Виртуальные соединения, которые открываются/близко к пулу соединений. Я попытался использовать npgsqlconnection.clearallpools () между ожидаемыми функциями Get, но это не сработало. Моя мысль - что -то не закрывает/не освобождает ресурсы или что -то еще, но это не особенно большие вопросы - они возвращают около 400 и 150 записей, каждый из которых маленькие (по 3 струнным полям), поэтому я не думаю, что это проблема распределения памяти. Относительно, что это происходит на первом чтении второй команды, независимо от того, в каком порядке я пробую функции получить.
Подробнее здесь:
https://stackoverflow.com/questions/796 ... ad-command