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

调用GetPropertiesOfSecretVersionsAsync提示不存在WhereAwait定义求助

问题原因

你遇到的报错是Azure Key Vault最新SDK的异步枚举类型使用方式不对导致的,核心原因有两个:

  1. GetPropertiesOfSecretVersionsAsync、GetPropertiesOfSecretsAsync这类方法返回类型是AsyncPageable<T>,它实现的是IAsyncEnumerable<T>接口,不是直接返回Task对象,所以不能直接用await关键字修饰方法本身。
  2. WhereAwait、OrderByDescendingAwait这类异步LINQ扩展方法不包含在默认SDK依赖中,需要额外安装对应NuGet包才能使用。

解决方案

方案1:使用原生await foreach遍历(无需额外依赖)

C# 8及以上版本支持异步遍历IAsyncEnumerable<T>,你可以直接用这个语法处理结果,不需要安装额外包,兼容性更好:

var validVersions = new List<SecretProperties>();
// 异步遍历所有密钥版本
await foreach (var versionProp in client.GetPropertiesOfSecretVersionsAsync(secret.Name))
{
    // 过滤启用的版本
    if (versionProp.Enabled.GetValueOrDefault())
    {
        validVersions.Add(versionProp);
    }
}
// 按创建时间倒序排序
var versions = validVersions.OrderByDescending(p => p.CreatedOn.GetValueOrDefault()).ToList();

方案2:使用异步LINQ扩展方法

如果你要保留原博客的链式写法,需要先安装对应依赖:

  1. 安装NuGet包:System.Linq.Async
  2. 确保代码文件引入了System.Linq命名空间
  3. 修正直接await方法的错误写法,原链式代码不需要调整即可正常运行:
var versions = await client.GetPropertiesOfSecretVersionsAsync(secret.Name)
                    .WhereAwait(p => new ValueTask<bool>(p.Enabled.GetValueOrDefault() == true))
                    .OrderByDescendingAwait(p => new ValueTask<DateTimeOffset>(p.CreatedOn.GetValueOrDefault()))
                    .ToListAsync()
                    .ConfigureAwait(false);

补充说明

你调用同步方法没有问题的原因是,同步的GetPropertiesOfSecretVersions等方法返回的是Pageable<T>,实现了同步IEnumerable<T>接口,可以直接用常规LINQ方法处理,和异步返回类型的逻辑完全不同。

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:45:03