C# 任务<;TResult>;。ConfigureWait(false)在捕获的上下文上继续

C# 任务<;TResult>;。ConfigureWait(false)在捕获的上下文上继续,c#,async-await,task-parallel-library,C#,Async Await,Task Parallel Library,我有以下代码块: Task task2Seconds = Wait2Seconds(); Task task5Seconds = Wait5Seconds(); await task5Seconds; await task2Seconds.ConfigureAwait(false); 等待的第一个任务被视为在相同(捕获的)上下文上恢复,但需要5秒钟 第二个任务wait配置为不在捕获的上下文上恢复,只需2秒钟 结果是在等待第二个任务之后,它仍然在捕获的上下文上继续 我不明白背后的逻辑,有人能给

我有以下代码块:

Task task2Seconds = Wait2Seconds();
Task task5Seconds = Wait5Seconds();

await task5Seconds;
await task2Seconds.ConfigureAwait(false);
  • 等待的第一个任务被视为在相同(捕获的)上下文上恢复,但需要5秒钟
  • 第二个任务wait配置为不在捕获的上下文上恢复,只需2秒钟
  • 结果是在等待第二个任务之后,它仍然在捕获的上下文上继续 我不明白背后的逻辑,有人能给我解释一下吗

    谢谢
    Khoi

    当您调用
    ConfigureAwait(false)
    时,您告诉.NET在
    await
    之后恢复执行时,框架不需要在相同的上下文中恢复执行。但这与告诉框架不需要在相同的上下文中恢复是不同的

    您的第二个
    wait
    正在等待已完成的任务。因此,可以立即同步执行延续,即不放弃对线程的控制。因此,在这种情况下,您的代码保持在相同的上下文中


    这并不是说,
    await
    专门将您返回到原始上下文。相反,它只是没有理由离开上下文,所以当
    等待
    完成时,你仍然在那里。

    @EmrahSüngü在哪里?@Khoi:他删除了他的答案,因为两个答案都不正确。他误解了你的密码。谢谢@PeterDuniho。我也在读他的评论,但这是不正确的,但我认为他从你那里学到了很多东西。我也是:)@Khoi,正如彼得指出的,我错了,但这对我来说是一个很好的学习。但他是一位严格的老师:)我没有注意到你一创建任务就开始了<代码>任务task2Seconds=Wait2Seconds();任务task5Seconds=Wait5Seconds()