iCo*_*ode 7 azure azure-storage azure-queues
我需要一些帮助来理解azure CloudBlobClient,CloudQueueClient和CloudBlob类中的线程安全性.
我正在开发一个包含多个独立作业处理器的辅助角色,其中每个作业处理器从特定队列中读取并写入/更新到可能相同的某些blob容器.
我想确保这些工作处理器没有踩到彼此的脚趾.
1>如何在不使用任何锁的情况下确保是这种情况?如果我将单独的CloudBlobClient和CloudQueueClient分配给我的每个作业处理器(所有处理器都在同一个进程中),是否足以说它们彼此独立并且因为每个作业处理器使用单独的客户端实例,它们将无法运行互相进入?
2>在同一个作业处理器中,如果我尝试在CloudBlobClient上使用Parallel.ForEach并行调用GetBlobReference或UploadText并行,我是否需要合并某种同步或者这些方法是否安全?Azure文档说它们不是,但我在网上看到的大多数示例似乎都没有对这些方法应用任何类型的同步机制.实现这一目标的最佳方法是什么?我的意思是使用一个CloudBlobClient并在并行调用GetBlobReference或UploadText的最佳方法?
我查了一下CloudBlobClient MSDN上的文档,内容是:
此类型的任何公共静态(在 Visual Basic 中为共享)成员都是线程安全的。不保证任何实例成员都是线程安全的。
由于这不是静态成员,因此不能保证线程安全。如果您想确保您不会被 MS 在存储客户端库中可能遗漏的任何线程问题所困扰,那么您应该确保每个线程都有自己的客户端(也许创建一个ThreadStatic变量) 。
话虽如此,我已经使用了 aCloudBlobClient来上传多个项目,Parallel.ForEach但没有造成任何问题。
| 归档时间: |
|
| 查看次数: |
2963 次 |
| 最近记录: |