c# - 如果使用 ConfigureAwait(false),异步/等待仍然会死锁吗?
问题描述
根据此链接,在特定情况下,异步/等待可能会发生死锁。
ConfigureAwait(false)
但是,如果我总是使用,还会发生死锁吗?
例如:task.ConfigureAwait(false).GetAwaiter().GetResult()
代替:task.GetAwaiter().GetResult()
解决方案
如果将要完成的任何事情task
或任何进一步的嵌套操作已经捕获了您当前的上下文,如果该上下文绑定到特定线程,它仍然可能死锁 - 因为您正在GetResult
使用该线程进行调用并阻塞,使其无法被其他人使用仍然使用。
只需使用await
. 它await
可以释放你当前的上下文。
推荐阅读
- unit-testing - 如何从 DD 路径测试中找到独立路径?
- angular - 使用 ngFor 时在迭代中同时设置类和数据
- c++ - SetWindowRgn 将窗口主题更改为 Classic
- c++ - 如何在给定位置反转 std::list?
- jquery - ASP.NET MVV Core 应用程序:加载资源失败:服务器响应状态为 404(未找到)bootstrap.css:1
- swagger - 我想从给定的 swagger.json 创建 curl 请求?
- sql - 将查询结果作为 CSV 文件从 Docker PostgreSQL 容器导出到本地机器
- mongodb-query - MongoDB 通配符索引 - 如何用索引覆盖投影
- c++ - 是否需要使用 Json::value object=Json::objectValue 来初始化?
- database - 使用实体框架的一对一关系