首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConfigureAwait与性能

ConfigureAwait与性能
EN

Stack Overflow用户
提问于 2022-10-07 06:53:13
回答 1查看 81关注 0票数 2
  1. await MyMethnodAsync()await MyMethnodAsync().ConfigureAwait(true)是一样的,从程序的角度来看,operation?
  2. ConfigureAwait(false)总是改进performance?
  3. When,做ConfigureAwait(false),改进performance?
  4. When,ConfigureAwait(true),改进performance?
EN

回答 1

Stack Overflow用户

发布于 2022-10-07 07:04:45

在编写本报告时,

  1. 是“是的,ish";"ish”是因为a:需要执行少量的额外代码(显式地将您的首选项存储在结构中等),以及b:await MyMethnodAsync()MyMetnodAsync的任何可评估的返回值都有效,但是.ConfigureAwait只在某些特定(尽管非常常见)可见类型上实现(至少在默认情况下);比您想象的更多东西是可执行的;例如,await Task.Yield().ConfigureAwait(true);为此不编译;“在撰写本文时”是因为我希望有一天会出现某种程序集/模块级的默认设置,它可以与编译器一起使用来自动化缺省值,因此对于一个库来说,例如[module:ConfigureAwaitDefault(false)] --但是:这在今天不存在(在我所知道的任何计划中也不存在)
  2. no;如果没有同步--上下文,它将不会产生任何功能上的差异--而且在许多情况下(例如,现代asp.net、控制台exes、服务exes )没有-上下文(默认情况下);当存在同步上下文时,它仍然不能保证有任何性能差异;这不是重点,真的;真正的要点是:“如果有同步上下文,我需要使用它吗?我是否需要主动不使用它?对于与UI等无关的库代码,我是否关心是否使用它,如果是这样的话,我应该选择不使用它吗?对于那些与UI等无关的库代码,答案应该是通常是(并不总是)“我应该避免它,即使有一个”;对于应用程序代码来说,最安全的答案通常是“如果有,我应该在存在同步上下文时使用它”,并且会造成某种节流/瓶颈,这可能是因为在单个工作循环上序列化回调(就像winforms那样);或者更糟的是:在同步上下文可能导致死锁的情况下(我猜死锁在糟糕的performance?)
  3. in理论中是终极的),它不应该在任何方向产生性能影响,除了执行值任务操作

这一琐碎的步骤之外。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73983445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档