- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要一些帮助来了解 azure CloudBlobClient、CloudQueueClient 和 CloudBlob 类中的线程安全性。
我正在开发一个辅助角色,其中包括多个独立的作业处理器,其中每个作业处理器从特定队列读取数据并写入/更新到一些可能相同的 blob 容器。
我想确保这些作业处理器不会互相干扰。
1> 如何在不使用任何类型的锁的情况下确保情况确实如此?如果我为每个作业处理器(都位于同一进程中)分配一个单独的 CloudBlobClient 和 CloudQueueClient,是否足以说它们彼此独立,并且因为每个作业处理器都使用单独的客户端实例,所以它们不会运行彼此之间到底有什么关系?
2> 在同一作业处理器中,如果我尝试使用 Parallel.ForEach 在 CloudBlobClient 上实现并行性,以并行调用 GetBlobReference 或 UploadText,我是否需要合并某种同步,或者这些方法线程安全吗? Azure 文档说它们不是,但我在网上看到的大多数示例似乎都没有对这些方法应用任何类型的同步机制。实现这一目标的最佳方法是什么?我的意思是使用一个 CloudBlobClient 并并行调用 GetBlobReference 或 UploadText 的最佳方式?
最佳答案
我查看了 CloudBlobClient
documentation on MSDN它说的是:
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
由于这不是静态成员,因此不能保证线程安全。如果您想确保您不会被 MS 在存储客户端库中可能遗漏的任何线程问题所困扰,那么您应该确保每个线程都有自己的客户端(也许创建一个 ThreadStatic变量)。
话虽如此,我已经使用 CloudBlobClient
在 Parallel.ForEach
中上传多个项目,而没有造成任何问题。
关于Azure Blob 和队列线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6024274/
我是一名优秀的程序员,十分优秀!