HttpResponseMessage"不包含"GetAwaiter"的定义,也没有可访问的扩展方法"GetAwaiter"



我在C#中有一个xUnit方法,可以测试Web API

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

但是HttpResponseMessage' does not contain a definition for 'GetAwaiter' and no accessible extension method 'GetAwaiter'遇到此错误.如果我删除async Taskawait,它可以成功运行。

不要调用Result,在使用异步和等待模式时,它可能会导致问题

var apiResponse = await apiClient.GetAsync($"http://xxx/weatherforecast");

但是,问题是因为您尝试使用与需要等待的关键字关联的await语言功能。编译器规定,要await某些内容,它必须满足某些约束。等待者必须实现GetAwaiter方法、INotifyCompletionIsCompletedGetResult方法。这就是错误消息所描述的内容。

这是因为您调用了返回任务结果值的Result<T>方法(在本例中为从GetAsync<Task<T>>返回的任务的结果,您的HttpResponseMessage(。然后,您试图将其await为任务/可等待的任务,但事实并非如此。

一般来说,在现代,很少有情况下称呼ResultWait实际上是一个好主意。

最新更新