如何允许此循环调用异步方法

时间:2019-07-02 11:24:58

标签: c# asynchronous

我有这个循环:

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

它允许遍历枚举成员并为每个成员调用一个方法。

我也希望允许采用异步方法并等待它们,但是我找不到可行的语法。

1 个答案:

答案 0 :(得分:2)

异步方法应该返回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);  
}