Как написать асинхронное задание < IEnumerable < Employee > > Тип возврата

Здесь я написал как async Task> GetCountries (), какой тип возвращаемого мной типа я упомянул

Repo.cs

public async Task<IEnumerable<Country>> GetCountries()
        {
            var x=  from n in _ConnectToDb.Country
                    orderby n.CountryId
                    select n;
            return x.ToList();
        }

Я назвал это в My controller как

[111 ]

Я получаю сообщение об ошибке, так как Deos не содержит определения как GetAwaiter

-1
задан 20.01.2019, 05:51

4 ответа

            public Task<IEnumerable<Country>> GetCountries()
            {
                var x=  from n in _ConnectToDb.Country
                        orderby n.CountryId
                        select n;
                return Task.FromResult(x.ToList());
            }

Это было бы решением в вашем случае. Проблема в вашем коде заключается в том, что вы должны выполнить повторную настройку Task или запустить ожидаемый метод в GetCountries(). Само ключевое слово Async ничего не значит, оно не будет запускать метод асинхронно, оно просто позволит вам использовать await. Так что это избыточно в вашем случае

0
ответ дан 07.04.2019, 12:22
  • 1
    @crimson589 извиняют меня, прием ( level - 1 ) отсутствовал. Таким образом время начала было исключено из-за отсутствующего значения нуля для уровня. – Barbaros Özhan 26.01.2019, 20:29

Синтаксический сахар async в вашем первом методе не нужен и проблематичен, так как вы ничего не ожидаете. Вам просто нужно вернуть Task из вашего результата. Но поскольку вы используете оператор LINQ (то же самое верно для любого метода LINQ), запрос не обрабатывается до тех пор, пока не будет вызван (и также повторно обрабатывается для любых последующих вызовов), поэтому я рекомендую немедленно оценить его:

[ 110]
0
ответ дан 07.04.2019, 12:22
  • 1
    I' ve начал использовать гибкий провод, но все еще поразил, насколько полезный это может быть. Мне на самом деле нужен текст для пребывания слева.. – Moseleyi 27.01.2019, 17:22

Этот ответ отредактирован

Ваш метод настроен на возврат одного Country, но ваш код возвращает IEnumerable<Country>.

Но проблема, похоже, решается по-разному в зависимости от версии .Net. Если вы используете .Net Core 2.2 (или позже в будущем), это должно работать:

public async Task<ActionResult<IEnumerable<Country>>> GetCountryRes()
{
    var x = await ObjRepo.GetCountries();    
    return x;
}
0
ответ дан 07.04.2019, 12:22
  • 1
    Нет, который не работал бы – Sir Rufo 20.01.2019, 05:57
  • 2
    @einord не работают – JOHN Mickh 20.01.2019, 05:58
  • 3
    Разве это не работает? – einord 20.01.2019, 05:59
  • 4
    Нет, необходимо возвратиться ActionResult<Country[]> – Sir Rufo 20.01.2019, 05:59
  • 5
    @einord не работа... – JOHN Mickh 20.01.2019, 06:00
  • 6
    Извините, только добрался для испытания его сегодня. Я изменил его на (уровень - 1), но теперь I' m проигрывающее 6:00 от 24 января, если there' s никакие данные по той дате. – crimson589 28.01.2019, 11:33

Для GetCountries у меня есть две версии

public async Task<IEnumerable<Country>> GetCountries()
{
    var x = from n in _ConnectToDb.Country
            orderby n.CountryId
            select n;

    return await Task.FromResult(x.ToList());
}

// I prefer this version 
public Task<IEnumerable<Country>> GetCountries2()
{
    var x = from n in _ConnectToDb.Country
        orderby n.CountryId
        select n;

    return Task.FromResult(x.ToList().AsEnumerable());
}

Контроллер

// Here I change the return value to IEnumerable
public async Task<ActionResult<IEnumerable<Country>>> GetCountryRes()
{
    var x =await ObjRepo.GetCountries();    
    return x;
}
0
ответ дан 07.04.2019, 12:22
  • 1
    Какая-либо определенная причина x.ToList().AsEnumerable()? – Sumit raj 20.01.2019, 06:31
  • 2
    Это won' t быть проблемой. List реализации IEnumerable – Sumit raj 20.01.2019, 06:40
  • 3
    @Sumitraj, Это - ошибка, если мы не используем AsEnumerable (): не Может неявно преобразовать тип System.Threading.Tasks.Task<System.Collections.Generic.List<ConsoleApp1.Country>> в System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<ConsoleApp1.Country>> – Fredy Adriano Jimenez Martinez 20.01.2019, 06:43
  • 4
    @Sumitraj, попытайтесь выполнить эту скрипку: dotnetfiddle.net/iYfq3m – elgonzo 20.01.2019, 06:45
  • 5
    @Sumitraj, обратите внимание, что ковариантность универсального параметра типа IEnumerable<T> не вызывает беспокойства здесь, так как тип возврата не IEnumerable<T>, а скорее Task<T>. И универсальный параметр типа Task< T> не является ковариантным... – elgonzo 20.01.2019, 06:47
  • 6
    Полагайте, что создание vowels установило настолько использующий in, O (1), а не O (n), где n является длиной vowels. – shash678 26.01.2019, 16:29

Теги

Похожие вопросы