[英]Concurrency not working in Azure table storage
在使用 Azure 表存储时,我遇到了多线程并发问题。 每个线程都试图更新相同的记录(分区键 + 行键)。 在那种情况下,我的期望是如果它是陈旧数据,库将自动检查etag
并抛出异常 412 Pre-Condition Failed。 但是,在我的情况下,它总是随着最后一次通话而更新。
值得注意的是,如果我使用TableEntityOperation.Replace(entity)
,它会抛出 412 异常。 似乎TableEntityOperation.InsertorMerge(entity)
不检查并发性。
您看到此行为的原因是因为TableEntityOperation.InsertorMerge(entity)
方法,它是Insert Or Merge Entity
的包装器 REST API 操作不支持乐观并发。 只有Merge Entity
和Update Entity
支持乐观并发。
从documentation
(强调我的):
插入或合并实体操作使用 MERGE 动词,必须使用 2011-08-18 版本或更新版本调用。 此外,它不使用 If-Match header 。 这些属性将此操作与更新实体操作区分开来,尽管这两个操作的请求主体相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.