我有2个帖子:
线程A:它将项目放入队列
toDoReuqests.Enqueue(item);
线程B:它从队列中获取项目
var iterator = toDoReuqests.GetEnumerator();
while ( iterator.MoveNext() )
{
Console.WriteLine("Tolto dalla coda B");
Console.WriteLine(iterator.Current.id);
}
从队列中删除项目是否正确?多线程可以在枚举器上给我一个错误吗?
答案 0 :(得分:3)
是的,您将遇到2个线程和简单队列的问题。建议 - 使用ConcurrentQueue。这是线程安全的。
主题A:
toDoReuqests.Enqueue("test");
主题B:
string retValue;
while(!toDoReuqests.TryDequeue(out retValue))
{
Console.WriteLine("Tolto dalla coda B");
Console.WriteLine(retValue);
}
从队列中删除项目使用方法Dequeue或TryDequeue。
答案 1 :(得分:1)
您的代码将不从队列中删除项目,它将简单地迭代它们。你需要做这样的事情:
while ( queue.Count > 0 )
{
var current = queue.Dequeue();
Console.WriteLine("Tolto dalla coda B");
Console.WriteLine(current);
}
此外,代码不是线程安全的,您需要queue
的线程安全实现,或者使用locks保护它