Когда вы загружаете BLOB-объект с определенным значением ETAG
, он будет работать впервые.Однако, когда вы повторно загружаете BLOB-объект с тем же ETAG
, он выдаст ошибку 412.Поскольку при работе с большим двоичным объектом будет обновляться ETAG
.
Оптимистичный параллелизм для больших двоичных объектов и контейнеров
Пользователь, выполняющий обновление такого объекта, может отправить висходный ETag
вместе с условным заголовком, чтобы гарантировать, что обновление будет происходить только при соблюдении определенного условия - в этом случае это заголовок If-Match
, который требует, чтобы служба хранения обеспечивала значение ETag
в запросе на обновление указано то же, что указано в службе хранения.
// Retrieve Etag from the response of an earlier UploadText blob operation.
string orignalETag = blockBlob.Properties.ETag;
// This code simulates an update by a third party.
string helloText = "Blob updated by a third party.";
// No etag, provided so orignal blob is overwritten (thus generating a new etag)
blockBlob.UploadText(helloText);
Console.WriteLine("Blob updated. Updated ETag = {0}", blockBlob.Properties.ETag);
// Now try to update the blob using the orignal ETag provided when the blob was created
try
{
Console.WriteLine("Trying to update blob using orignal etag to generate if-match access condition");
blockBlob.UploadText(helloText,accessCondition:
AccessCondition.GenerateIfMatchCondition(orignalETag));
}
catch (StorageException ex)
{
if (ex.RequestInformation.HttpStatusCode == (int)HttpStatusCode.PreconditionFailed)
{
Console.WriteLine("Precondition failure as expected. Blob's orignal etag no longer matches");
}
}
Более подробно вы можете обратиться к этой статье .