"HttpResponseMessage' does not contain a definition for 'GetAwaiter' and no accessible extension method 'GetAwaiter'"

8 浏览
0 Comments

"HttpResponseMessage' does not contain a definition for 'GetAwaiter' and no accessible extension method 'GetAwaiter'"

我在C#中有一个测试web api的xUnit方法。\n

[Fact]
public async Task GetWeatherForecast()
{
    var apiClient = new HttpClient();
    var apiResponse = await apiClient.GetAsync($"http://xxx/weatherforecast").Result;
    Assert.True(apiResponse.IsSuccessStatusCode);
}

\n但是出现了错误`HttpResponseMessage\' does not contain a definition for \'GetAwaiter\' and no accessible extension method \'GetAwaiter\'`。如果我移除`async Task`和`await`,它可以成功运行。

0
0 Comments

问题出现的原因是因为尝试使用await关键字相关的语言特性,而这些特性要求awaitable对象必须实现GetAwaiter方法、INotifyCompletion接口、IsCompleted属性和GetResult方法。错误信息描述了这一点。

问题的解决方法是不要调用Result方法,因为它返回的是一个任务的结果值(在这种情况下是从GetAsync方法返回的任务的结果,即HttpResponseMessage)。然后,尝试将它像一个任务/awaitable对象一样await,这是不正确的。

一般来说,在现代编程中,很少有情况下调用Result或Wait方法是一个好主意。

0