Учитывая следующий фрагмент кода (найденный где-то при изучении потоковой передачи).
public class BlockingQueue<T>
{
private readonly object sync = new object();
private readonly Queue<T> queue;
public BlockingQueue()
{
queue = new Queue<T>();
}
public void Enqueue(T item)
{
lock (sync)
{
queue.Enqueue(item);
Monitor.PulseAll(sync);
}
}
public T Dequeue()
{
lock (sync)
{
while (queue.Count == 0)
Monitor.Wait(sync);
return queue.Dequeue();
}
}
}
Я хочу понять,
Почему существует цикл while?
while (queue.Count == 0)
Monitor.Wait(sync);
и что не так с
if(queue.Count == 0)
Monitor.Wait(sync);
Фактически, все время, когда я вижу похожий код, который я нашел, используя цикл while, кто-нибудь может помочь мне понять использование одного над другим. Спасибо.