8

Azure CloudBlobClient、CloudQueueClient、CloudBlobクラスのスレッドセーフを理解するのに助けが必要です。

私は、複数の独立したジョブプロセッサを含むワーカーロールを開発しています。これらの各ジョブプロセッサは、特定のキューから読み取り、同じである可能性のあるいくつかのBLOBコンテナーに書き込み/更新します。

これらのジョブプロセッサがお互いに足を踏み入れていないことを確認したいと思います。

1>ロックを使用せずにこれが当てはまるかどうかを確認するにはどうすればよいですか?個別のCloudBlobClientとCloudQueueClientを各ジョブプロセッサ(すべて同じプロセス内に存在する)に割り当てる場合、それらは互いに独立しており、すべてのジョブプロセッサが個別のクライアントインスタンスを使用するため、実行されません。お互いにまったく?

2>同じジョブプロセッサ内で、Parallel.ForEachを使用してCloudBlobClientで並列処理を実行しようとすると、GetBlobReferenceまたはUploadTextを並列に呼び出す必要がありますか、それともこれらのメソッドはスレッドセーフですか?Azureのドキュメントには、そうではないと書かれていますが、オンラインで見たほとんどの例では、これらのメソッドに同期メカニズムを適用していないようです。これを達成するための最良の方法は何ですか?1つのCloudBlobClientを使用して、GetBlobReferenceまたはUploadTextを並行して呼び出す最良の方法を意味しますか?

4

2 に答える 2

3

私はCloudBlobClient MSDNのドキュメントを見て、それが何を言っているかを見てみました。

このタイプのパブリックスタティック(Visual Basicで共有)メンバーはすべてスレッドセーフです。インスタンスメンバーは、スレッドセーフであることが保証されていません。

これは静的メンバーではないため、スレッドセーフであるとは限りません。MSがストレージクライアントライブラリで見逃した可能性のあるスレッドの問題に巻き込まれないようにする場合は、各スレッドに独自のクライアントがあることを確認する必要があります(おそらくThreadStatic変数を作成します) 。

そうは言っても、問題なくCloudBlobClient複数のアイテムをアップロードするためにを使用しました。Parallel.ForEach

于 2011-05-16T23:57:27.957 に答える
2

ランダムに選択された関数のドキュメントには、「このタイプのパブリック静的メンバーはスレッドセーフです。インスタンスメンバーはスレッドセーフであるとは限りません。」と書かれていますが、誰かができなかったため、これは定型的なものだと思います。わざわざ考えてみました。Reflectorを使用してクラスを調べることをお勧めしますが、参照するすべてのクラスは、UploadTextのような呼び出しを行うと、最終的にHTTP RESTリクエストに入れられるプロパティのリポジトリであるため、問題ないと思います。異なるスレッドで1つのオブジェクトのプロパティを変更しない限り(そして、Parrallel.ForEachの反復ごとにCloudBlobReferenceを作成する必要はないと思います)、安全だと思います。

于 2011-05-16T23:56:27.423 に答える