-1

我正在学习 EFCore 和IAsyncEnumerable(现在使用 .net 5 和所有期望)并且我正在努力理解await foreach,因为在我所做的一个测试用例中阻止了执行(或者在我看来)

static async Task Main()
{
    await Test().ConfigureAwait(false);

    Debug.WriteLine("this should happen before, isn't it?");
    Console.ReadKey();
}

static async Task Test()
{
    using var ctx = new MyContext();

    var testDbset = ctx.Entries;

    await foreach (var entry in testDbset.ConfigureAwait(false))
    {
        Console.WriteLine(entry.ToString());
    }
}

问题是“之前”句子写在最后,甚至没有写在中间;并且控制台突然被完全填满了。上下文正在查询 localsql 数据库。有什么我不明白的吗?

4

1 回答 1

2

如果您希望消息首先出现,请不要等待任务打印完成。

static async Task Main()  
{
    var task = Test().ConfigureAwait(false);
    Debug.WriteLine("this should happen before, isn't it?");
    await task;
    Console.ReadKey();
}
于 2020-11-23T22:01:37.290 回答