как можно позволить этому циклу вызывать асинхронные методы - PullRequest
3 голосов
/ 02 июля 2019

У меня есть этот цикл:

public static void ForEachValue<T>(Action<T> F)
{
    foreach (var E in GetValues<T>())
    {
        F(E);
    }
}

Позволяет перебирать членов перечисления и вызывать метод для каждого.

Я хотел бы также разрешить принимать асинхронные методы и ожидать их, но я не могу найти синтаксис, который бы работал.

1 Ответ

2 голосов
/ 02 июля 2019

Асинхронный метод должен возвращать Task, поэтому вам нужно использовать Func<T, Task> вместо Action<T>. Таким образом, вы можете сделать это и await каждое задание:

public static async Task ForEachValue<T>(Func<T, Task> F)
{
    foreach (var E in GetValues<T>())
    {
        await F(E);
    }
}

Или вы можете даже сократить это до:

public static async Task ForEachValue<T>(Func<T, Task> F)
{
    var tasks = GetValues<T>().Select(F);
    await Task.WhenAll(tasks);  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...