Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Collections 迭代ConcurrentQueue<;T>;_Collections_.net 4.0_Thread Safety - Fatal编程技术网

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);
}