2010-10-21 89 views
2

這是迭代ConcurrentQueue<T>的安全方法嗎?迭代ConcurrentQueue <T>

while (cq.GetEnumerator().MoveNext()) 
{ 
    IIndexTask task; 
    if (cq.TryDequeue(out task)) 
     task.Execute(service); 
} 
+0

呼喚出隊多次將有效地經過隊列中的項目,所以沒有理由重複它。 – 2010-10-21 11:55:01

+0

@Brian - 我們將定期出隊,所以需要知道多少次調用出隊。我不認爲伯爵會是線程安全的? – 2010-10-21 11:57:24

+2

但TryDequeue會告訴你操作是否成功。你還需要什麼? – 2010-10-21 11:59:47

回答

5

只是這樣做,而不是...

IIndexTask task; 
while (cq.TryDequeue(out task)) 
{ 
    task.Execute(service); 
}