库类型远程web服务调用和HttpClient ConfigureAwait(false)

本文关键字:ConfigureAwait HttpClient false 调用 类型 web 服务 | 更新日期: 2023-09-27 18:13:13

假设您正在创建一个库,以便在多个应用程序之间共享,其中一些应用程序可能作为完全同步的代码库存在。这个库的目的是使用HttpClient使用async await执行web服务调用。

给定类似于

的场景
var client = new HttpClient(....) { .... }
var response = await client.GetAsync("Users/").ConfigureAwait(false);

所有异步等待的使用是否应该始终包括ConfigureAwait(false)的使用?

在包含该false设置之前,此代码在同步应用程序中使用时似乎会死锁。

库类型远程web服务调用和HttpClient ConfigureAwait(false)

是的,您应该在所有库代码中包含ConfigureAwait。我不建议在async方法上同步阻塞,但如果您始终使用ConfigureAwait,这是可行的。

作为一个副作用,ConfigureAwait也会提高你的性能。

我在我的博客和最近的MSDN文章中详细描述了为什么这样做。