Enqueue(T)
複数のスレッドから同時に呼び出し、それらのスレッドが完了するのを待ってからDequeue()
キューを呼び出したり列挙したりすると、スレッドセーフになりますか?
var queue = new Queue<int>();
Action enqueue = () =>
{
for (int i = 0; i < 100000; i++)
queue.Enqueue(i);
};
var tasks = new[]
{
new Task(enqueue),
new Task(enqueue),
new Task(enqueue)
};
foreach (var task in tasks)
task.Start();
Task.Factory.ContinueWhenAll(tasks, t =>
{
while (queue.Count > 0)
Console.WriteLine(queue.Dequeue());
});