MultiThreading中的信令问题

时间:2013-10-18 08:53:28

标签: c# multithreading autoresetevent

我正在从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
    }
  }

有人可以解释这种行为吗?

1 个答案:

答案 0 :(得分:3)

因为没有花括号,_wh.WaitOne不是else语句的一部分。你可能想要

      else {
        Console.WriteLine("In waiting state .... 1");
        _wh.WaitOne(); 
      }