【发布时间】:2015-03-20 15:19:13
【问题描述】:
是否可以上传到 blob 存储并在同一事务中获取该 blob 的租约。这是为了避免潜在的竞争条件。
以下代码执行上述操作,但作为两个不同的事务:
blob.UploadText(String.Empty);
blob.AcquireLease(TimeSpan.FromSeconds(60), leaseId);
如果另一个线程/进程/实例必须在上述两个事务之间获取该 blob 的租约,则将抛出 StorageException(HTTP 代码 412)。
可以通过捕获此类异常来缓解这种情况,如下所示,但由于无法在一个事务中执行上传和租用获取,我们无法保证在上传后该线程将租用 blob。
blob.UploadText(String.Empty);
try
{
blob.AcquireLease(TimeSpan.FromSeconds(60), leaseId);
}
catch (StorageException ex)
{
if (ex.RequestInformation.HttpStatusCode != 412)
{
throw;
}
}
【问题讨论】:
-
您能否更详细地描述您的场景,尤其是
avoid a potential race conditionone? -
@GauravMantri:我已经更新了我的问题。如果这还不够,请告诉我。