我需要一些帮助来理解 azure CloudBlobClient、CloudQueueClient 和 CloudBlob 类中的线程安全性。
我正在开发一个辅助角色,其中包括多个独立的作业处理器,其中每个作业处理器从特定队列读取数据并写入/更新到一些可能相同的 blob 容器。
我想确保这些作业处理器不会互相干扰。
1> 如何在不使用任何类型的锁的情况下确保这种情况?如果我为每个作业处理器(都位于同一进程中)分配单独的 CloudBlobClient 和 CloudQueueClient,是否足以说它们彼此独立,并且因为每个作业处理器都使用单独的客户端实例,所以它们不会运行彼此之间到底有什么关系?
2> 在同一作业处理器中,如果我尝试使用 Parallel.ForEach 在 CloudBlobClient 上实现并行性,以并行调用 GetBlobReference 或 UploadText,我是否需要合并某种同步,或者这些方法线程安全吗? Azure 文档说它们不是,但我在网上看到的大多数示例似乎都没有对这些方法应用任何类型的同步机制。实现这一目标的最佳方法是什么?我的意思是使用一个 CloudBlobClient 并并行调用 GetBlobReference 或 UploadText 的最佳方式?
我看了一下CloudBlobClient
MSDN 上的文档 http://msdn.microsoft.com/en-us/library/ee772850.aspx它说的是:
此类型的任何公共静态(在 Visual Basic 中为共享)成员都是线程安全的。不保证任何实例成员都是线程安全的。
由于这不是静态成员,因此不能保证线程安全。如果您想确保您不会被 MS 在存储客户端库中可能遗漏的任何线程问题所困扰,那么是的,您应该确保每个线程都有自己的客户端(也许创建一个线程静态 http://msdn.microsoft.com/en-us/library/system.threadstaticattribute.aspx多变的)。
话虽如此,我已经使用了CloudBlobClient
上传多个项目Parallel.ForEach
不会造成任何问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)