我有这个循环:
public static void ForEachValue<T>(Action<T> F)
{
foreach (var E in GetValues<T>())
{
F(E);
}
}
它允许遍历枚举成员并为每个成员调用一个方法。
我也希望允许采用异步方法并等待它们,但是我找不到可行的语法。
答案 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);
}