C# HttpResponseMessage'不包含'GetAwaiter'的定义,并且没有可访问的扩展方法'GetAwaiter'
我有一个C语言中的xUnit方法来测试web apiC# HttpResponseMessage'不包含'GetAwaiter'的定义,并且没有可访问的扩展方法'GetAwaiter',c#,async-await,C#,Async Await,我有一个C语言中的xUnit方法来测试web api [Fact] public async Task GetWeatherForecast() { var apiClient = new HttpClient(); var apiResponse = await apiClient.GetAsync($"http://xxx/weatherforecast").Result; Assert.True(apiRespon
[Fact]
public async Task GetWeatherForecast()
{
var apiClient = new HttpClient();
var apiResponse = await apiClient.GetAsync($"http://xxx/weatherforecast").Result;
Assert.True(apiResponse.IsSuccessStatusCode);
}
但遇到此错误时,HttpResponseMessage“不包含“GetAwaiter”的定义,并且没有可访问的扩展方法“GetAwaiter”。如果我删除了异步任务并等待,它可能会成功运行。不要调用结果,在使用异步和等待模式的最佳情况下,它可能会导致问题
但是,问题是因为您试图使用与等待关键字相关联的语言功能,该功能需要等待关键字。编译器规定,要等待某些内容,它必须满足某些约束。等待必须实现GetAwaiter方法、INotifyCompletion、IsCompleted和GetResult方法。这就是错误消息所描述的
这是因为您调用了Result方法,该方法返回任务的结果值。在本例中,它是从HttpResponseMessage GetAsync返回的任务结果。然后你试图等待它,就像它是一项任务/等待,而事实并非如此
一般来说,在现代,很少有情况下调用Result或Wait是一个好主意。请参阅相关内容
var apiResponse = await apiClient.GetAsync($"http://xxx/weatherforecast");