首页 > 解决方案 > 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' 的使用。参见规则”。错误在突出显示的行中有人可以帮我解决这个问题吗

标签: c#asp.net-coresonarqubeasp.net-core-webapi

解决方案


我认为错误很明显。您正在调用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;

推荐阅读