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
相关产品推荐
相关产品推荐

