我正在从Albahari's threading article link - >实施“生产者/消费者队列”
在下面的本文的工作方法中,如果我添加了一个类似的控制台 Console.WriteLine(“等待状态...... 1”) 在 _wh.WaitOne()之前,然后信令不起作用,消费者线程似乎无限期地等待。
void Work()
{
while (true)
{
string task = null;
lock (_locker)
if (_tasks.Count > 0)
{
task = _tasks.Dequeue();
if (task == null) return;
}
if (task != null)
{
Console.WriteLine ("Performing task: " + task);
Thread.Sleep (1000); // simulate work...
}
else
**Console.WriteLine("In waiting state .... 1");**
_wh.WaitOne(); // No more tasks - wait for a signal
}
}
有人可以解释这种行为吗?
答案 0 :(得分:3)
因为没有花括号,_wh.WaitOne不是else语句的一部分。你可能想要
else {
Console.WriteLine("In waiting state .... 1");
_wh.WaitOne();
}