首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure Blob容器线程安全?

Azure Blob容器线程安全?
EN

Stack Overflow用户
提问于 2016-05-17 07:56:33
回答 1查看 2.6K关注 0票数 2

我有一个web项目,用户可以上传图像,并存储在Azure blob中。守则如下:

代码语言:javascript
复制
public class AzureImageHandler : IImageHandler
{       
    public async Task<string> StoreImage(byte[] image)
    {
        var storageAccount = CloudStorageAccount.Parse(
           CloudConfigurationManager.GetSetting("StorageConnectionString"));

        var blobClient = storageAccount.CreateCloudBlobClient();

        // Retrieve a reference to a container.
        var container = blobClient.GetContainerReference("images");

        // Create the container if it doesn't already exist.
        container.CreateIfNotExists();

        container.SetPermissions(
           new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });

        // Retrieve reference to a blob named "myblob".
        var blockBlob = container.GetBlockBlobReference("myblob");

        await blockBlob.UploadFromByteArrayAsync(image, 0, image.Length);

        return blockBlob.Uri.ToString();
    }
}

我已经使用Autofac设置了DI,我想知道是否有任何代码是线程安全的。也就是说,我可以有一个单例容器,所有请求都使用它来获得对一个新blob的引用,还是每次都需要运行整个方法?我无法确定CloudStorageAccount/BlobClient/Container是否线程安全。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-05-17 09:04:28

来自CloudBlobContainer类的文档:

此类型的任何公共静态(在Visual中共享)成员都是线程安全的。不保证任何实例成员都是线程安全的。

我相信你也会在其他课程中找到类似的东西。

如果可以的话,我想提出两个建议:

代码语言:javascript
复制
container.CreateIfNotExists();

container.SetPermissions(
   new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });

对每个请求执行以下2行代码。如果您相当肯定blob容器将在您的存储帐户中,您可以删除这两行代码,因为这两行进行网络调用,并可能减慢您的系统。如果所有用户都在同一个容器中上载文件,则可以在应用程序的启动中移动此代码。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37270321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档