поток не работает, когда я использую метод ToListAsyn c - PullRequest
2 голосов
/ 04 марта 2020

У меня есть EF Core программа.

Код

class EagerLoading
{
    public async void load()
    {
        Console.WriteLine("a");
        var teams = await loadTeamsAsync();
        Console.WriteLine("c");
    }
    public async Task<List<Team>> loadTeamsAsync()
    {
        Console.WriteLine("b");
        using (var context = new SchoolContext())
        {
            return await context.teams.
                ToListAsync();
        }
    }
}
//Entry method
static void Main(string[] args)
{
    new EagerLoading().load();
}

Выход

a
b

Ожидается

a
b
c

Вопрос

где я не прав? почему Console.WriteLine("c"); не выполняется?

1 Ответ

5 голосов
/ 04 марта 2020

Вам потребуется указать ReadKey или аналогичный в методе Main, чтобы приложение не могло выйти из .

Load - это async void (который должен вызывать сигналы тревоги) и выполняется без наблюдения , в свою очередь, существует высокая вероятность того, что приложение завершит работу прежде чем он закончится так, как вы ожидаете (или в этом случае запись в консоль ).

static void Main(string[] args)
{
    new EagerLoading().load();
    Console.ReadKey();
}

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

...