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

标签 c# asynchronous

我有这个循环:

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

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

我也想允许采用异步方法并等待它们,但我找不到合适的语法。

最佳答案

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

关于c# - 如何允许此循环调用异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56851388/

相关文章:

c# - SSH.Net异步文件下载

c# - 将依赖注入(inject)添加到 MVVM 应用程序

c# - 通过 ref 传递 List<int>

c# - 在 Visual Studio 编辑器中删除空格指示器

c# - 如何将异步任务存储在字典中并根据配置值调用它们?

javascript - 用于顺序执行同步和异步函数的 jQuery Deferred 和 Promise

c# - 寻找使用评估引擎构建 "TestMaker"(问题和响应)应用程序的技巧

c# - asp.net core 2.0 dotvvm vs razor pages - 对于交互式网络应用程序来说,哪个更强大?

javascript SetTimeout 仅在函数退出时调用

node.js - NodeJS,如何强制异步 for 循环在传递到下一次迭代之前等待 HTTP 请求解析,这样我们就不会收到 EMFILE 错误?