Этот ответ все еще остается в силе с последними пакетами: WindowsAzure.Storage 9.3
имаюсь разработкой приложения Azure, которому необходимо в какой-то момент загрузить (загрузить) большое количество небольших больших двоичных объектов в один контейнер (более 1 тыс. Больших двоичных объектов, менее 1 МБ каждый). Чтобы ускорить этот процесс, я хотел бы использовать несколько потоков для загрузки (скачивания) блобов.
Это обычная процедура, которую я использую для загрузки одного блоба:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer blobContainer =
blobClient.GetContainerReference(ContainerName);
blobContainer.CreateIfNotExist();
CloudBlob blob = blobContainer.GetBlobReference(Id);
blob.UploadByteArray(Data);
Для каждого типа, используемого в приведенном выше коде, MSDN говорит следующее:
Любые открытые статические (Shared в Visual Basic) члены этого типа являются потокобезопасными. Любые члены экземпляра не гарантированно являются потокобезопасными.
Означает ли это, что мне нужно выполнить следующий код в каждом потоке? Или, может быть, я могу выполнить его только один раз и разделить один экземпляр CloudBlobContainer между различными потоками?
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer blobContainer =
blobClient.GetContainerReference(ContainerName);
Я был бы очень рад использовать один экземпляр CloudBlobContainer в разных потоках, иначе это серьезно замедляет весь процесс загрузки (выгрузки).