c# - 使用 AsyncContext 遇到死锁代码
问题描述
这是我的代码,我在我的库中使用AsyncEx试图绕过潜在的死锁,但我最终还是在那里:
return AsyncContext.Run(async () =>
{
var get = await httpClient.GetAsync(url);
if (get.IsSuccessStatusCode && (get.StatusCode == HttpStatusCode.OK))
{
var content = await get.Content.ReadAsStringAsync();
return content;
}
return "";
});
我从命令行应用程序运行它,url
连续使用多个不同的值调用它,但在一个大for
循环中同步。如果有足够多的调用,它最终会死在它的轨道上。难道我做错了什么?
解决方案
我认为发生的是,在调用 GetAsync 后,延续无法切换回同一个线程,因为另一个线程正在等待延续开始。以下代码有效吗?
return AsyncContext.Run(async () =>
{
var get = await httpClient.GetAsync(url).ConfigureAwait(false);
if (get.IsSuccessStatusCode && (get.StatusCode == HttpStatusCode.OK))
{
var content = await get.Content.ReadAsStringAsync().ConfigureAwait(false);
return content;
}
return "";
});
推荐阅读
- javascript - R Shiny:在列背景颜色之上获取 DT 行背景颜色
- java - java.sql.SQLException:在 blob 数据类型上 PreparedStatement.setObject 上的列类型无效
- django - 如何在 Django-Rest 中更新模型记录
- ios - 具有自定义形状的 UIView layoutMargins
- java - Choco Solver setObjective 最大化多项式方程
- mysql - MySQL - 如何组合来自两个表的数据,使用一个字段的值作为过滤器来计算另一个字段中的值?
- excel - Excel 2013 VBA:复制粘贴公式从复制的单元格中复制值(除了公式)而不是重新计算
- javascript - URL 编码是否足以用于 href 属性以防止 XSS?
- javascript - Mongoose 查询生成器。或未返回预期结果
- c# - 是否需要在数据库中保留刷新令牌