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
}
}
}
當我擁有它時,我是否必須將該事件設置爲假當它返回_queueNotifier.WaitOne()
或它是如何工作的時候,出列還是事件回到假?AutoResetEvent進程?
我是否應該像下面的例子那樣使用inner,或者兩種方式都好嗎?
while (_socket.Connected)
{
_queueNotifier.WaitOne();
while (!_queue.IsEmpty)
{
Data data;
if (_queue.TryDequeue(out data))
{
//handle the data
}
}
}
我會檢查一下,但我仍然有興趣瞭解AutoResetEvent如何在未來再次需要時進一步瞭解它。 – Prix
@Prix:已編輯以包含該信息。有關更多信息,請參閱AutoResetEvent的文檔。 –
感謝您的更新,至於你剛纔說的話,我有點困惑,因爲將concurrentqueue包裝在blockingcollection中,而不是僅僅使用blockingcolletion更容易?如果你能,我會欣賞一些樣本,所以我可以更好地理解你在說什麼...... – Prix