是否可以上传到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;
}
}
答案 0 :(得分:1)
AFAIK,今天无法在一次交易中上传和获得租约。
查看上面的代码,你不能将blob.UploadText
放在同一个try / catch块中吗?这样,如果第一个线程已获得租约,则第二个线程的上传操作将失败。此外,由于这些操作是按顺序而不是并行发生的,因此上传blob的线程很可能会获得租约。你需要尝试一下。