You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:42:14