Итерация по списку задач C # - PullRequest
0 голосов
/ 24 января 2019

У меня есть такой код

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"))

, это показывает ошибку, что

"не содержитобщедоступное определение для 'GetEnumerator' '

Я пытался использовать

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

, но все еще показывает ошибку.Есть предложения?

1 Ответ

0 голосов
/ 24 января 2019

С помощью метода async, подобного этому

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

Рекомендуется await это

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 Await Pattern распространяется как вирус через ваш код


Дополнительное чтение

Стивен Клири: Async and Await

...