.NET 7异步方法返回可空Product[]报错,求正确返回方式
问题解决:异步方法返回产品数组的正确写法
错误原因
你在异步方法中同时混用了await和.Result,导致代码试图等待一个非Task类型的对象(Product[]?)。.Result会同步获取Task<ProductResponse?>的最终结果(ProductResponse?),此时再对它的Results属性用await,自然会报错——因为数组类型没有GetAwaiter方法。
正确实现方式
分步写法(可读性更好)
public async Task<Product[]?> GetProducts(Dictionary<string, dynamic> keyValuePairs) { // 正确await异步请求,得到ProductResponse?类型的结果 var productResponse = await _httpClientService.GetRequest<ProductResponse>(url, _headerPairs); // 安全访问Results属性,返回Product[]? return productResponse?.Results; }
简化写法(一行完成)
public async Task<Product[]?> GetProducts(Dictionary<string, dynamic> keyValuePairs) { return (await _httpClientService.GetRequest<ProductResponse>(url, _headerPairs))?.Results; }
关键注意事项
- 绝对不要在
async标记的方法中使用.Result或.Wait(),这不仅会破坏异步编程的非阻塞特性,还可能引发线程死锁问题。 await只能用于Task/Task<T>类型,异步方法返回的Task<ProductResponse?>经过await后,会直接得到ProductResponse?实例(或null),再通过空条件运算符?.即可安全获取内部的Results数组。
内容的提问来源于stack exchange,提问作者bilpor
相关产品推荐
相关产品推荐

