public void Commit()
{
try
{
parent.AssertNotDisposed();
queueStorage.Global(actions =>
{
foreach (var bookmark in bookmarks)
{
actions.GetQueue(bookmark.QueueName)
.SetMessageStatus(bookmark, MessageStatus.ReadyToDeliver);
}
foreach (var msg in messages)
{
actions.MarkReceived(msg.Id);
}
actions.Commit();
});
parent.receivedMsgs.Add(messages.Select(m => m.Id));
foreach (var msg in messages)
{
parent.OnMessageQueuedForReceive(msg);
}
lock (parent.newMessageArrivedLock)
{
Monitor.PulseAll(parent.newMessageArrivedLock);
}
}
finally
{
Interlocked.Decrement(ref parent.currentlyInCriticalReceiveStatus);
}
}