gpt4 book ai didi

c# - HttpResponseMessage' 不包含 'GetAwaiter' 的定义并且没有可访问的扩展方法 'GetAwaiter'

转载 作者:行者123 更新时间:2023-12-05 08:50:16 32 4
gpt4 key购买 nike

我在 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' 不包含 'GetAwaiter' 的定义并且没有可访问的扩展方法 'GetAwaiter'。如果我删除 async Taskawait,它可以成功运行。

最佳答案

不要调用 Result ,在使用 async 和 await 模式

的最佳时机可能会导致问题
 var apiResponse = await apiClient.GetAsync($"http://xxx/weatherforecast");

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

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

一般来说,在现代调用Result的情况很少见。 , 或 Wait实际上是个好主意。

关于c# - HttpResponseMessage' 不包含 'GetAwaiter' 的定义并且没有可访问的扩展方法 'GetAwaiter',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62419799/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com