-1

我正在从Albahari 的线程文章链接中实现“生产者/消费者队列” -->

在下面这篇文章的工作方法中,如果我在_wh.WaitOne() 之前添加一个控制台写入,如 Console.WriteLine("In waiting state .... 1"),那么信号不起作用并且消费者线程似乎无限期地等待.

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
    }
  }

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

4

1 回答 1

3

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

      else {
        Console.WriteLine("In waiting state .... 1");
        _wh.WaitOne(); 
      }
于 2013-10-18T09:04:00.980 回答