当你有服务器端代码(即一些ApiController
),你的函数是异步的-所以他们返回Task<SomeObject>
-它被认为是最佳实践,任何时候你等待函数,你调用ConfigureAwait(false)
?
我曾经读到过,它的性能更高,因为它不需要将线程上下文切换回原始线程上下文。然而,使用ASP。NET Web Api,如果你的请求是在一个线程,你等待一些函数和调用ConfigureAwait(false)
,这可能会把你放在不同的线程,当你返回你的ApiController
函数的最终结果。
我在下面打了一个例子:
public class CustomerController : ApiController
{
public async Task<Customer> Get(int id)
{
// you are on a particular thread here
var customer = await GetCustomerAsync(id).ConfigureAwait(false);
// now you are on a different thread! will that cause problems?
return customer;
}
}