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

调用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;
    }


白衣染霜花
浏览 486回答 3
3回答

白衣非少年

我发现使用ConfigreAWaet(False)最大的缺点是线程区域性被恢复为系统默认值。如果你已经配置了一种文化,例如.<system.web> &nbsp;&nbsp;&nbsp;&nbsp;<globalization&nbsp;culture="en-AU"&nbsp;uiCulture="en-AU"&nbsp;/>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;...并且您托管在一个服务器上,该服务器的文化设置为en-US,然后您将在ConfigreAWaet(False)被称为CultureInfoat之前找到它,现在的文化将返回en-AU,在您获得en-US之后将返回。E.//&nbsp;CultureInfo.CurrentCulture&nbsp;~&nbsp;{en-AU}await&nbsp;xxxx.ConfigureAwait(false);//&nbsp;CultureInfo.CurrentCulture&nbsp;~&nbsp;{en-US}如果您的应用程序正在执行任何需要特定于区域性的数据格式的操作,那么在使用ConfigreAWaet(False)时,您需要注意这一点。
打开App,查看更多内容
随时随地看视频慕课网APP