private ConcurrentQueue<Data> _queue = new ConcurrentQueue<Data>();
private AutoResetEvent _queueNotifier = new AutoResetEvent(false);
public void MoreData(Data example)
{
_queue.Enqueue(example);
_queueNotifier.Set();
}
private void _SimpleThreadWorker()
{
while (_socket.Connected)
{
_queueNotifier.WaitOne();
Data data;
if (_queue.TryDequeue(out data))
{
//handle the data
}
}
}
イベントをデキューしたら、イベントを false に設定する必要がありますか?それとも、イベントが戻ってきたとき、_queueNotifier.WaitOne()
または正確にどのように機能するかによって、それ自体で false に戻りますか?
代わりに以下の例のようにインナー while を使用する必要がありますか、それとも両方の方法で問題ありませんか。
while (_socket.Connected)
{
_queueNotifier.WaitOne();
while (!_queue.IsEmpty)
{
Data data;
if (_queue.TryDequeue(out data))
{
//handle the data
}
}
}