Parellel。因为我没有按预期的方式工作

时间:2018-12-10 13:13:11

标签: c# parallel-processing

我正在尝试使用Parallel.For循环合并一些PDF文档,以便可以一次创建多个文档。 99%以上的代码可以正常工作(当MaxDegreeOfParallelism = 1时可以完美工作),但是当我合并同一PDF的多份副本时,我遇到了问题。 transItem.DocumentList将包含所有文档及其合并字段,如下所示:

DocID   Field     Value
1       LastName  Smith
2       Year      2015
2       Year      2016
2       Year      2017

下面是我的代码

var options = new ParallelOptions { MaxDegreeOfParallelism = -1 };

Parallel.ForEach(transItem.DocumentList, options, (docItem) =>
{
    //Get list of merge field for this document
    List<Document> fieldList = documentList.Where(x => x.document_id == docItem.document_id).ToList();

    //Get the extension (if any) and make it part of the bar code
    int extension = 0;

    if (GlobeTax.GlobeTax.IsNumeric(docItem.extension))
        extension = int.Parse(docItem.extension);

    docItem.bar_code = "01" + extension.ToString("00") + transItem.TransactionID.ToString("00000000") + docItem.document_id.ToString("0000");

    //Iterate through the field list and assign the values 
    foreach (Document docFieldItem in fieldList)
    {
        //Assign the value from the cobject containing the merge data.
        GetFieldValue(docFieldItem, boData, docItem.extension, emailInstructionsSB.ToString());

        docFieldItem.bar_code = docItem.bar_code;
    }

   pdfList[docItem.array_pos] = docManagerAPI.ProcessPDF(fieldList);

});

结果是,有时我得到两个文档#2,它们的年份为2016,一个没有文档的年份为2015,一个为2017。条形码有时与文档中的年份不匹配。

我对此很陌生,因此可能犯了一个明显的错误。有什么东西撞向任何人吗?

谢谢

卡尔

0 个答案:

没有答案