c# - Soanrqube 显示等待 -.net 核心的阻止程序
问题描述
得到一个声纳问题实际上它被记录为一个阻塞器,说用等待替换结果。
var registerData = new
{
arg1 = "1",
DeviceId = "2"
};
var content = new StringContent(JsonConvert.SerializeObject(registerData), Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync("myapicall", content);
if (!response.IsSuccessStatusCode || response.Content == null)
{
return null;
}
**MyClass myClass = JsonConvert.DeserializeObject<myClass>(response.Content.ReadAsStringAsync().Result);**
return myClass;
我收到的错误消息是“用 'await' 替换对 'Task.Result' 的使用。参见规则”。错误在突出显示的行中有人可以帮我解决这个问题吗
解决方案
我认为错误很明显。您正在调用ReadAsStringAsync()
,但不是等待生成的任务,而是尝试读取结果,这将阻塞当前线程,直到读取完成。
SonarQube 要求您做的是等待任务,而不是这是处理异步工作负载的正确方法。
MyClass myClass = JsonConvert.DeserializeObject<myClass>(await response.Content.ReadAsStringAsync());
return myClass;
或者让它更清楚
var json = await response.Content.ReadAsStringAsync();
MyClass myClass = JsonConvert.DeserializeObject<myClass>(json);
return myClass;
推荐阅读
- java - 在 Java 中查找 W3C Dom 节点的 Xpath
- amazon-web-services - 在 TTL 允许的范围之外截断 DynamoDB 表
- java - Firestore 生成的密钥与集合中的自定义密钥?
- google-apps-script - 根据行单元格值的出现复制或更新行
- verilog - Systemverilog 中的双向分配
- android - AsyncTask 实际上不是异步的
- authentication - cochdb 权限角色始终“未授权”
- apache-camel - Apache Camel File 组件基本路径
- javascript - 使用 javascript 更改 DIV 按钮的值
- angular - Angular 6:不要触发验证器 setValue