【问题标题】:In an asynchronous ASP.NET Web API with a lot of traffic, what is the impact of setting ConfigureAwait false?在流量很大的异步 ASP.NET Web API 中,将 ConfigureAwait 设置为 false 有什么影响?
【发布时间】:2016-10-29 21:41:28
【问题描述】:

我正在开发一个新的API,它最终会获得大量流量。我最初的印象是我想通过完整的async/await 堆栈设置ConfigureAwait(false),但在尝试调试一些application insightstracing 之后,我发现@987654327 中的某些值如果我使用ConfigureAwait(false),@ 会丢失。

任何拥有高流量 API 经验的人都可以告诉我我可能遗漏的任何其他可能会受到 ConfigureAwait(false) 影响的信息吗?比如用户是否可以接收来自不同用户请求的输出?

删除我的API 中的所有ConfigureAwait(false) 语句会有什么影响?

【问题讨论】:

  • “用户是否可以接收来自不同用户请求的输出”将是一个巨大的错误。而且我不相信 ConfigureAwait 打破了这一点。我不知道您正在寻找什么样的明确答案,但是除非您有一些特殊的线程关联情况(这不太可能),否则 AFAIK .ConfigureAwait(false) 几乎是 webapi 的最佳实践
  • 这是合乎逻辑的,如果没有 configure(false),它需要保留额外的信息来维护线程亲和性——然后可以通过配置清除这些信息。如果您仍然担心,我建议您深入了解被删除的确切内容。

标签: c# asp.net asp.net-web-api async-await asp.net-web-api2


【解决方案1】:

用户是否可以接收来自不同用户请求的输出?

实际上,没有。通过添加ConfigureAwait(false),这肯定不会发生只是。为此,您需要非常明确地将数据从一个请求传递到另一个请求。

删除我的 API 中的所有 ConfigureAwait(false) 语句会有什么影响?

该 API 无法访问有关当前请求的任何信息,因为就它而言,不会有当前请求。对于 API,这将是可取的。 UI 特定代码将与当前请求交互以向 API 提供输入,并能够使用 API 调用的结果更新请求,但 API 本身不会与请求交互。

也就是说,除非您的 API 专门设计为 UI API,并且其设计目的明确是与当前请求交互,在这种情况下,您不希望显式删除有关当前请求的信息ConfigureAwait(false)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多