当我使用 ToListAsync 方法时线程不起作用

a thread doesn't work when I use ToListAsync method

我有一个 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"); 不执行?

您需要在 Main 方法中放置一个 ReadKey 或类似的方法来阻止应用程序 退出

Load是一个async void(应该是敲响了警钟)并且运行unobserved,反过来申请的概率很高exiting 在它以您期望的方式完成之前(或者在这种情况下写入 console)。

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

注意 :你应该只在事件处理程序(或逻辑上代表事件处理程序的构造)上使用 on async voids,它是或多或少是它们存在的主要原因.