线程安全的方式来复制ConcurrentQueue

时间:2014-05-13 06:33:09

标签: c# multithreading

基本上我想实现这个目标:

private ConcurrentQueue<FormData> _formsData;

private void SaveForms()
{
    var serializer = new DataContractSerializer(_formsData.GetType());
    serializer.WriteObject(fileStream, _formsData);
}

但我认为将ConcurrentQueue作为object参数传递是不可线程安全的。所以我首先需要以安全的方式将整个队列复制到另一个集合,然后将这个新集合传递给WriteObject

我找到了CopyTo的{​​{1}}方法,它似乎是线程安全的。但它需要一个预先初始化的数组,因此代码将是:

ConcurrentQueue

这似乎也不安全(var data = new FormData[_formsData.Count]; _formsData.CopyTo(data, 0); Count之间的其他线索可以更改元素数量。)

那么有一种线程安全的方式来复制CopyTo吗?

1 个答案:

答案 0 :(得分:3)

在ConcurrentQueue上使用ToArray方法。

http://msdn.microsoft.com/en-us/library/dd267275(v=vs.110).aspx

相关问题