アルバハリのスレッド記事リンクから「プロデューサー/コンシューマーキュー」を実装していました->
以下のこの記事の作業方法で、 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
}
}
誰かがこの動作を説明できますか?