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

BlobBaseClient的GetPropertiesAsync调用无响应,无法获取Blob内容长度

你当前调用GetProperties的对象错误,你是在BlobContainerClient(容器客户端)上调用该方法,获取的是容器的元数据,而非你需要读取的单个Blob文件的属性,这是第一个明显的逻辑错误。


1. 修复调用逻辑

你需要先获取目标Blob对应的BlobClient实例,再调用其GetProperties方法获取Blob内容长度,正确的调用示例如下:

全异步写法(推荐,避免死锁)

BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient("my-container");
// 替换为你实际要读取的Zip文件的Blob名称
BlobClient blobClient = containerClient.GetBlobClient("target.zip");
BlobProperties properties = await blobClient.GetPropertiesAsync();
long contentLength = properties.ContentLength;

同步写法(仅建议在无同步上下文的环境使用)

BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient("my-container");
BlobClient blobClient = containerClient.GetBlobClient("target.zip");
BlobProperties properties = blobClient.GetProperties();
long contentLength = properties.ContentLength;

2. 排查调用卡住的问题

如果修复调用逻辑后仍然卡住,按以下方向排查:

  • 避免混合异步同步调用:你之前用GetAwaiter().GetResult()的写法在带同步上下文的环境(比如WinForm/WPF UI线程、ASP.NET Framework 环境)中极易触发死锁,要求全链路使用await调用异步方法,不要混用阻塞式调用。
  • 检查网络与权限:
    • 确认客户端网络可以正常访问Azure存储服务端点,没有代理、防火墙、NSG规则拦截请求
    • 确认你使用的身份凭证(Azure AD账户、SAS令牌、存储账户密钥)至少拥有目标Blob的读取权限,对应RBAC角色至少为存储Blob数据读取者
  • 升级SDK版本:你使用的Azure.Storage.Blobs 12.10.0为旧版本,存在多个已知的HTTP请求卡死、死锁的bug,建议升级到最新稳定版后重试。

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

相关产品推荐
方舟 Agent Plan

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

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