为了账号安全,请及时绑定邮箱和手机立即绑定

调用ConfigreA的最佳实践-等待所有服务器端代码

调用ConfigreA的最佳实践-等待所有服务器端代码

白衣染霜花 2019-07-01 11:12:26
调用ConfigreA的最佳实践-等待所有服务器端代码当您有服务器端代码(即ApiController),并且您的函数是异步的,所以它们返回Task<SomeObject>-是否认为最佳做法是,在任何时候等待你调用的函数ConfigureAwait(false)?我已经读到,它具有更高的性能,因为它不需要将线程上下文切换回原来的线程上下文。但是,使用ASP.NETWebApi,如果您的请求出现在一个线程上,并且等待某个函数并调用ConfigureAwait(false),这可能会使您在返回您的最终结果时处于不同的线程中。ApiController功能。我已经打了一个例子来说明我在下面说的话:public class CustomerController : ApiController{     public async Task<Customer> Get(int id)     {         // you are on a particular thread here         var customer = await SomeAsyncFunctionThatGetsCustomer(id).ConfigureAwait(false);         // now you are on a different thread!  will that cause problems?         return customer;     }
查看完整描述

3 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

我发现使用ConfigreAWaet(False)最大的缺点是线程区域性被恢复为系统默认值。如果你已经配置了一种文化,例如.

<system.web>
    <globalization culture="en-AU" uiCulture="en-AU" />    
    ...

并且您托管在一个服务器上,该服务器的文化设置为en-US,然后您将在ConfigreAWaet(False)被称为CultureInfoat之前找到它,现在的文化将返回en-AU,在您获得en-US之后将返回。E.

// CultureInfo.CurrentCulture ~ {en-AU}await xxxx.ConfigureAwait(false);// CultureInfo.CurrentCulture ~ {en-US}

如果您的应用程序正在执行任何需要特定于区域性的数据格式的操作,那么在使用ConfigreAWaet(False)时,您需要注意这一点。


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 469 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信