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;