-1

アルバハリのスレッド記事リンクから「プロデューサー/コンシューマーキュー」を実装していました->

以下のこの記事の作業方法で、 Console.WriteLine("In waiting state .... 1")のようなコンソール書き込みを _wh.WaitOne()の 前に追加すると、シグナリングが機能せず、Consumer スレッドが無期限に待機しているように見えます.

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 に答える