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

Azure Blob存储读取时如何忽略ETag检查以规避并发报错?

解决Azure Blob并发读写导致的412条件不满足错误

你设置IfMatch = new ETag("*")或ETag.All的做法有误,这不仅不会忽略ETag检查,反而会强制要求Blob必须存在——但无法规避读取过程中Blob被修改引发的ETag变更问题。当你通过OpenReadAsync打开流后,后续的分块读取请求会携带初始获取的ETag,一旦其他程序修改Blob导致ETag变更,就会触发412错误。

正确的处理方式是不添加任何ETag相关的条件限制,让读取操作忽略并发修改的影响:

// 不传入BlobRequestConditions,使用默认配置(无任何条件检查)
using (var stream = await blob.OpenReadAsync(offset, sgmtSize)) 
{
    stream.Read();
}

如果你需要显式声明忽略条件,可以初始化空的BlobRequestConditions对象,不设置任何条件属性:

BlobRequestConditions blobRequestConditions = new BlobRequestConditions();
// 不设置IfMatch/IfNoneMatch等条件属性

using (var stream = await blob.OpenReadAsync(offset, sgmtSize, blobRequestConditions)) 
{
    stream.Read();
}

另外,如果你的业务场景允许一次性读取完整Blob内容,推荐使用DownloadToAsync方法——它仅发送一次请求,能避免分块读取过程中ETag变化带来的问题:

using (var stream = new MemoryStream())
{
    await blob.DownloadToAsync(stream);
    stream.Position = 0;
    stream.Read();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:45:23