2017-10-19 2 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 

는 서버의 응답에 면밀한 관찰을 복용 후, 나는 상태 설명이 말한다 발견 "지정된 큐가 삭제되고있다."

내가 그렇게 반환하면, 내가 확실히 알고 큐가 이미 삭제 호출 할 수있는 방법이 있습니까?

============================================== =========================== UPDATE 지금은 그것을 생각. 푸른 큐 서버가 삭제 결과 응답하기를 원한다면, 그것은 ... 분명히 나쁜의 desgin (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 컨테이너/테이블/파일 공유)을 삭제하는 것은 비동기 작업입니다. 당신이 대기열을 삭제 요청을 보낼 때 (아무런 작업이 수행되지 할 수 있도록) 한 후 실제로 백그라운드 프로세스를 통해 큐를 삭제, 푸른 저장은 삭제 해당 대기열을 표시합니다. 문서를 기반으로 대기열을 삭제하는 데 최대 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이면 잠시 기다렸다가 작업을 다시 시도해야합니다. 원하는 경우 다시 시도 간격을 늘릴 수 있습니다.

관련 문제