Этот ответ все еще остается в силе с последними пакетами: 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 в разных потоках, иначе это серьезно замедляет весь процесс загрузки (выгрузки).

Ответы на вопрос(1)

Ваш ответ на вопрос