Во-первых, вам нужно сделать ваши методы асинхронными. Это означает, что они должны вернуть задание. Например:
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!
Если ваши методы возвращают логическое значение, , тогда тип возвращаемого значения становится 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();
Эта ошибка означает то, что она говорит, существует слишком много клиентов, подключенных к postgreSQL. Действительно ли Вы - единственный, подключенный к этой базе данных? Вы выполняете графический IDE? Какой метод Вы используете для подключения? Вы тестируете запросы в то же самое время, когда Вы выполняющий код? любой из этих вещей могла быть проблема. Если Вы - администратор, Вы можете число клиентов, но если программа подвесит его открытый, то это не будет долгое время помогать.
Существует слишком много причин, что у Вас могло быть слишком много клиентов, работающих одновременно с редкой информацией, которую Вы дали нам.