gpt4 book ai didi

c# - ConfigureAwait(false) 和省略 await 之间的区别?

转载 作者:太空狗 更新时间:2023-10-29 18:14:54 26 4
gpt4 key购买 nike

您有以下方法:

async Task DoWorkAsync();

以下两个调用在功能上是否存在差异:

1. DoWorkAsync();
2. await DoWorkAsync().ConfigureAwait(false);

我唯一看到的是,Visual Studio 在使用第一个时会发出警告,通知您该方法将继续执行,而不会等待结果。

最佳答案

Is there a difference in functionality between the following two invocations:

  1. DoWorkAsync();
  2. await DoWorkAsync().ConfigureAwait(false);

是的;他们是完全不同的。第一个启动异步方法,然后立即继续当前方法。第二个(异步)等待异步方法完成。

有两个主要的语义差异:

  1. 当执行此行之后的代码时。如果您 await DoWorkAsync,则以下代码将在 DoWorkAsync 完成后才会执行。如果您只是调用 DoWorkAsync 而不等待它,那么以下代码将在 DoWorkAsync 产生时立即执行。
  2. 如何处理异常。如果您 await DoWorkAsync,则来自 DoWorkAsync 的任何异常都会自然传播。如果您只是调用 DoWorkAsync 而不等待它,那么任何异常都将被静默捕获并放置在返回的任务中(被忽略,因此编译器警告)。

关于c# - ConfigureAwait(false) 和省略 await 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25102034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com