【问题标题】:ConfigureAwait. General issues配置等待。一般问题
【发布时间】:2022-10-07 14:13:51
【问题描述】:

由于使用任何可用线程的能力,ConfigureAwait(false) 提供了更好的性能。 John Sharpe 的 C# Step by Step 书说:“如果在等待语句之后运行的代码需要在原始线程上运行,则不应使用 ConfigureAwait(false)。”

我有三个问题:

  1. 在什么情况下我可能需要使用 ConfigureAwait(true) 或根本不使用 ConfigureAwait,据我了解,这是一回事吗?为什么有必要在原始线程上执行代码?
  2. 为什么开发人员没有像 ConfigureAwait(false) 那样制作默认逻辑,因为它在性能方面要好得多?
  3. 为了提高性能,我是否应该始终使用 ConfigureAwait(true)?
  • 您首先要说明 false 选项可以提供更好的性能(无论它是否提供更好的性能,因为没有一个固定的性能定义,因此仍然值得商榷),然后在 3)中询问您是否应该使用 true 来获取更好的性能。无论您使用什么定义,它们都不能提供更好的性能。

标签: c# asynchronous


【解决方案1】:
  1. 一般的经验法则是,任何与 UI 相关的内容,您都希望避免使用 ConfigureAwait(false) 进行上下文切换可能会增加的线程问题

  2. 由于上述原因(但他们确实做到了,请阅读底部)

  3. 再次相反,如果所讨论的线程在 UI 线程(例如 WPF 应用程序等)中不做任何工作。

    此外,从 .NET 5 开始,他们一般都不再使用 ConfigureAwait(true/false),因此如果您使用的是较新版本,则可以完全忽略它,除非您有非常具体的用例,或者您重新创建要与早期版本一起使用的包、针对 .NET Standard 的类库等就是一个很好的例子

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2011-11-11
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    相关资源
    最近更新 更多