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);
Khoi当您调用
ConfigureAwait(false)
时,您告诉.NET在await
之后恢复执行时,框架不需要在相同的上下文中恢复执行。但这与告诉框架不需要在相同的上下文中恢复是不同的
您的第二个wait
正在等待已完成的任务。因此,可以立即同步执行延续,即不放弃对线程的控制。因此,在这种情况下,您的代码保持在相同的上下文中
这并不是说,
await
专门将您返回到原始上下文。相反,它只是没有理由离开上下文,所以当等待完成时,你仍然在那里。@EmrahSüngü在哪里?@Khoi:他删除了他的答案,因为两个答案都不正确。他误解了你的密码。谢谢@PeterDuniho。我也在读他的评论,但这是不正确的,但我认为他从你那里学到了很多东西。我也是:)@Khoi,正如彼得指出的,我错了,但这对我来说是一个很好的学习。但他是一位严格的老师:)我没有注意到你一创建任务就开始了<代码>任务task2Seconds=Wait2Seconds();任务task5Seconds=Wait5Seconds()代码>