2017-10-19 17 views
1

私はAzure CloudQueueを使用するいくつかのテストを実行していますし、セットアップ/ティアダウンと私はCreateIfNotExistsAsync()DeleteIfExistsAsync()を呼び出しています。しかし、私がテストを実行しているときに、Microsoft.WindowsAzure.Storage.StorageExceptionが発生しました。「リモートサーバーからエラーが返されました:(409)競合」Azure CloudQueueが削除されるのを待つ方法はありますか?

await cloudQueue.CreateIfNotExistsAsync(); 
    // do work 1 
    await cloudQueue.DeleteIfExistsAsync(); 
    await cloudQueue.CreateIfNotExistsAsync(); // throws exception 
    // do work 2 

は、サーバの応答を詳しく見て取った後、私はStatusDescriptionが言うた「指定されたキューが削除されています。」

私はそれを返したら、私は確かに知っていることをキューがすでに削除されて呼び出すことができる方法はありますか?

============================================== =========================== UPDATE今、私はそれについて考えること。 Azureキューサーバは、削除結果に返信したい場合、それは明らかに(DOS攻撃に対する脆弱性)の悪い設計、実装残念ながら...

答えて

1

Is there a method that I can call so that once it returns, I know for sure the queue is already deleted?

なしで未完成の着信要求、を追跡する必要があります。キュー(またはBLOBコンテナ/テーブル/ファイル共有)を削除することは、非同期操作です。キューを削除する要求を送信すると、Azure Storageはそのキューを削除対象としてマークし(そのため、操作は実行できません)、実際にはバックグラウンドプロセスでキューを削除します。ドキュメントに基づいて、キューの削除には最大30秒かかることがあります。しかし、そこに保持されているデータの量によります。 documentationから

When a queue is successfully deleted, the queue is immediately marked for deletion and is no longer accessible to clients. The queue is later removed from the Queue service during garbage collection.

可能な回避策:

必要になるかもしキューが既に削除されていることを確認するためにあなたを教えてくれますどの呼び出すことができます何の方法は、ありませんので、 CreateIfNotExistsAsyncを使用してキューを作成し、エラーをキャッチしてください。 HTTPステータスコードがConflict (409)で、エラーコードがQueueBeingDeletedの場合、しばらくお待ちください、そして操作を再試行してください。必要に応じて、再試行の間隔を増やすことができます。

関連する問題