我正試圖在Parallel.Foreach循環中將單獨的集合寫入單獨的csv。當我運行這個時,出現以下錯誤:使用StreamWriter寫入Parallel.Foreach中的不同文件
該進程無法訪問文件'C:\ temp \ OCRProcess \ 2011 \ 49 \ OCRProcess-2011-49.csv',因爲它正在被另一個進程。
當我看着所有的工作進程,他們打開不同的文件,他們都沒有使用相同的文件位置。從我所知道的來看,每個線程(工作進程)都沒有衝突。
public void GenerateCSVFile(List<CSVFile> csvFiles)
{
Parallel.ForEach(csvFiles, (csvfile, state, index) =>
{
var fileLocation = _storageLocation + csvfile.Type + s + csvfile.Year + s + csvfile.Day + s + csvfile.Type + "-" +
csvfile.Year + "-" + csvfile.Day + ".csv";
if (!File.Exists(fileLocation))
{
File.Create(fileLocation);
}
using (var streamWriter = new StreamWriter(fileLocation))
{
foreach (var csvRecord in csvfile.CSVRecords)
{
streamWriter.WriteLine(csvRecord.Object_Id + "," + csvRecord.DocumentName + "," + csvRecord.BCI_DCN + "," + csvRecord.CreationDate);
}
}
});
}
以下是CSVFile和CSVRecord類的含義。
public sealed class CSVRecord
{
public String BCI_DCN { get; set; }
public String Object_Id { get; set; }
public String DocumentName { get; set; }
public String CreationDate { get; set; }
}
public sealed class CSVFile
{
public List<CSVRecord> CSVRecords { get; set; }
public String Year { get; set; }
public String Type { get; set; }
public String Day { get; set; }
public CSVFile()
{
CSVRecords = new List<CSVRecord>();
}
}
是否有可能您的清單中有重複的csv文件 csvFiles? –
Jason
我看過列表 csvFiles,沒有重複。 –
munchrall
問題是否總是出現在同一個文件中? – Jason