Я работаю над проектом на основе Azure для некоторых исследований и столкнулся с некоторыми проблемами при удалении сообщений из экземпляра CloudQueue. Код довольно прост, поэтому я немного озадачен тем, почему возникает исключение, когда я пытаюсь удалить сообщение из очереди.
Вот код, который создает данные для очереди:
foreach (var cell in scheme(cells))
{
string id = Guid.NewGuid().ToString();
var blob = sweepItemContainer.GetBlobReference(id);
using (BlobStream stream = blob.OpenWrite())
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(stream, cell);
}
sweepItemQueue.AddMessage(new CloudQueueMessage(id), new TimeSpan(1, 0, 0));
}
Вот код, который потребляет данные из очереди:
var msgs = sweepItemsQueue.GetMessages(MsgAmt);
foreach (var msg in msgs)
{
_handleMessage(msg, sweepItemsContainer);
sweepItemsQueue.DeleteMessage(msg);
mergeItemsQueue.AddMessage(new CloudQueueMessage(msg.AsString), new TimeSpan(1, 0, 0));
}
Я не вижу, как сообщение не может существовать в очереди. Ничто другое не мутирует в очереди, кроме других потребителей. Но я уверен, что они не могут получить одно и то же сообщение (если время не истекло), так как же это происходит?