c# - 遍历任务列表 C#

标签 c# loops asynchronous async-await

我有这样的代码

public async Task<List<User>> GetUsersByField(string fieldName, string fieldValue)
    {
        var filter = Builders<User>.Filter.Eq(fieldName, fieldValue);
        var result = await _usersCollection.Find(filter).ToListAsync();

        return result.ToList();
    }

当我尝试使用

迭代它时
foreach(var w in GetUsersByField("Name", John"))

显示错误

"does not contain a public definition for 'GetEnumerator'"

我试过用

public async IEnumerable<Task<List<User>>> GetUsersByField(string fieldName, string fieldValue)

但仍然显示错误。有什么建议吗?

最佳答案

使用像这样的 async 方法:

public async Task<List<User>> GetUsersByField(string fieldName, string fieldValue

建议等待它:

public async Task MyCallingMethod()
{
    var users = await GetUsersByField(...);

    foreach(var w in users ) 
    {
       ...
    }
}

或:

public async Task MyCallingMethod()
{
    foreach(var user in await GetUsersByField(...)) 
    { 
       ... 
    }
}

还有其他调用 Result 的方法,但我们不要走那个兔子洞。

简而言之,让您的异步等待模式像病毒一样通过您的代码传播。


补充阅读

斯蒂芬·克莱里:Async and Await

关于c# - 遍历任务列表 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54340074/

相关文章:

c# - 将 Windsor Logging Facility 安装到图书馆中

jquery - MediaWiki Javascript 轮播

c# - Microsoft.Owin.Security.OAuth.OAuthBearerAuthenticationMiddleware 警告 : 0 : invalid bearer token received

c - 尝试计算字符串中逗号的数量并保存到 int 计数器

linux - sed 循环中的参数

javascript - 嵌套 forEach 循环中的异步代码 - React Native

c# - 当内部调用不是自然异步时,如何创建自然异步方法?

javascript - Elm 中的并发

c# - 在命令窗口中重写字符

c# - 使用 SSH.NET 在进度栏中显示文件下载进度