Collections 迭代ConcurrentQueue<;T>;
这是一种安全的迭代方式吗Collections 迭代ConcurrentQueue<;T>;,collections,.net-4.0,thread-safety,Collections,.net 4.0,Thread Safety,这是一种安全的迭代方式吗 就这么做吧 IIndexTask task; while (cq.TryDequeue(out task)) { task.Execute(service); } 重复调用Dequeue将有效地遍历队列中的项目,因此没有理由重复它。@Brian-我们将定期退出队列,因此需要知道调用Dequeue的次数。我不认为Count是线程安全的,但是TryDequeue会告诉您操作是否成功。您还需要什么?@Brian-主要原因是我们不想同时处理整个队列。例如,如果我们在排
就这么做吧
IIndexTask task;
while (cq.TryDequeue(out task))
{
task.Execute(service);
}
重复调用Dequeue将有效地遍历队列中的项目,因此没有理由重复它。@Brian-我们将定期退出队列,因此需要知道调用Dequeue的次数。我不认为Count是线程安全的,但是TryDequeue会告诉您操作是否成功。您还需要什么?@Brian-主要原因是我们不想同时处理整个队列。例如,如果我们在排队发送电子邮件任务,我可能一次只想处理100个,这样我就不会杀死我的邮件服务器。我可以修改下面的@LukeH示例来添加一个计数器变量。谢谢
IIndexTask task;
while (cq.TryDequeue(out task))
{
task.Execute(service);
}