public Message Peek(string queueName, string subqueue, TimeSpan timeout)
{
var remaining = timeout;
while (true)
{
var message = PeekMessageFromQueue(queueName, subqueue);
if (message != null)
return message;
lock (newMessageArrivedLock)
{
message = PeekMessageFromQueue(queueName, subqueue);
if (message != null)
return message;
var sp = Stopwatch.StartNew();
if (Monitor.Wait(newMessageArrivedLock, remaining) == false)
throw new TimeoutException("No message arrived in the specified timeframe " + timeout);
remaining = Max(TimeSpan.Zero, remaining - sp.Elapsed);
}
}
}