Получение OperationalError: ФАТАЛЬНЫЙ: извините, слишком много клиентов, уже использующих psycopg2

Во-первых, вам нужно сделать ваши методы асинхронными. Это означает, что они должны вернуть задание. Например:

public static async Task Foo()
{
    await Task.Delay(1);
    Console.WriteLine("Foo!");
}

public static async Task Bar()
{
    await Task.Delay(1);
    Console.WriteLine("Bar!");
}

Затем, чтобы поместить их в список, вы должны определить список как содержащий правильный тип. Поскольку асинхронный метод на самом деле что-то возвращает, это Func, а не действие. Возвращает задание.

var actions = new List>
{
    Foo, Bar
};

Чтобы вызвать их, выберите список (используя Linq), чтобы вызвать их. Это создает список задач вместо списка функций.

var tasks = actions.Select( x => x() );

Тогда просто ждите их:

await Task.WhenAll(tasks);

Полный пример:

public static async Task MainAsync()
{
    var actions = new List>
    {
        Foo, Bar
    };
    var tasks = actions.Select( x => x() );
    await Task.WhenAll(tasks);
}

Вывод:

Foo!
Bar!

Пример на DotNetFiddle [ 119]

Если ваши методы возвращают логическое значение, , тогда тип возвращаемого значения становится Task, а остальные следуют его примеру:

public static async Task Foo()
{
    await Task.Delay(1);
    Console.WriteLine("Foo!");
    return true;
}

public static async Task Bar()
{
    await Task.Delay(1);
    Console.WriteLine("Bar!");
    return true;
}

var actions = new List>>
{
    Foo, Bar
};

var tasks = actions.Select( x => x() );

await Task.WhenAll(tasks);

После того, как вы их ожидаете Вы можете преобразовать задачи в их результаты с помощью еще одного оператора LINQ:

List results = tasks.Select( task => task.Result ).ToList();

10
задан Greg 6 February 2009 в 06:36
поделиться

1 ответ

Эта ошибка означает то, что она говорит, существует слишком много клиентов, подключенных к postgreSQL. Действительно ли Вы - единственный, подключенный к этой базе данных? Вы выполняете графический IDE? Какой метод Вы используете для подключения? Вы тестируете запросы в то же самое время, когда Вы выполняющий код? любой из этих вещей могла быть проблема. Если Вы - администратор, Вы можете число клиентов, но если программа подвесит его открытый, то это не будет долгое время помогать.

Существует слишком много причин, что у Вас могло быть слишком много клиентов, работающих одновременно с редкой информацией, которую Вы дали нам.

9
ответ дан 4 December 2019 в 01:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: