栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

调用ConfigureAwait获取所有服务器端代码的最佳实践

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

调用ConfigureAwait获取所有服务器端代码的最佳实践

更新: ASP.NET
Core没有

SynchronizationContext

。如果您使用的是ASP.NET
Core,则无论是否使用都
ConfigureAwait(false)
无所谓。

对于ASP.NET“完全”或“经典”之类的东西,其余答案仍然适用。

原始帖子(适用于非Core ASP.NET):

该ASP.NET团队的视频提供了有关

async
在ASP.NET
上使用的最佳信息。

我已经读到它具有更高的性能,因为它不必将线程上下文切换回原始线程上下文。

对于UI应用程序,这是正确的,在该应用程序中,您只需要“同步”回一个UI线程。

在ASP.NET中,情况要复杂一些。当一个

async
方法恢复执行时,它将从ASP.NET线程池中的线程。如果使用禁用了上下文捕获
ConfigureAwait(false)
,则线程将继续直接直接执行该方法。如果不禁用上下文捕获,则线程将重新输入请求上下文,然后继续执行该方法。

因此

ConfigureAwait(false)
,不会为您节省ASP.NET中的线程跳转;它确实为您节省了重新输入请求上下文的时间,但这通常非常快。如果您尝试对请求进行少量并行处理,则
ConfigureAwait(false)

可能 会很有用,但是TPL实际上更适合大多数情况。

但是,对于ASP.NET Web
Api,如果您的请求是在一个线程上发出的,并且您在等待某个函数并调用ConfigureAwait(false),则当您返回ApiController函数的最终结果时,这有可能使您进入另一个线程。

实际上,只要这样做

await
就可以做到。一旦您的
async
方法达到
await
,该 方法将 被阻止,但 线程
将返回线程池。当该方法准备好继续时,将从线程池中抢夺任何线程,并将其用于恢复该方法。

ConfigureAwait
ASP.NET 的唯一区别是恢复该方法时该线程是否进入请求上下文。

在我的MSDN文章

SynchronizationContext
async
简介博客中,我有更多的背景信息。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/594676.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号