Sonarqube 显示 await -.net core 的拦截器
Soanrqube shows blocker for await -.net core
获取声纳问题实际上它被记录为一个阻止程序,说用 await 替换结果。
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;
我收到的错误消息是“将 'Task.Result' 的使用替换为 'await'。请参阅规则”。错误在突出显示的行中
谁能帮我解决这个问题
我认为错误很明显。您正在调用 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;
获取声纳问题实际上它被记录为一个阻止程序,说用 await 替换结果。
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;
我收到的错误消息是“将 'Task.Result' 的使用替换为 'await'。请参阅规则”。错误在突出显示的行中 谁能帮我解决这个问题
我认为错误很明显。您正在调用 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;