并行foreach char数组空白

时间:2012-02-03 16:04:18

标签: c# task-parallel-library

我正在尝试创建一个并行的foreach循环来处理fasta文件。 我已将fasta文件加载到ConcurrentDictionary中并具有并行性 foreach设置,但是当我去处理ConcurrentDictionary我的char数组时 即使ConcurrentDictionary值,也会抛出一个关于空白的错误 从不空白。我尝试调试但是使用多线程非常困难 告诉我发生了什么。 谢谢 凯西

Parallel.ForEach(fastainfomation, info =>
{
    line = info.Key;
    name = info.Key;
    secondline = info.Value;

    if (name != "")
    {
        name = name.TrimEnd('\r', '\n');
        char[] secondlineprimer = secondline.ToCharArray();
        string primer = "";
        string primername = "";
        string primergroup = "";
        for (int ii = 0; ii < 8; ii++)
        {
            primer += secondlineprimer[ii];
        } ...

1 个答案:

答案 0 :(得分:7)

您在lambda表达式中未声明linename等事实表明它们已在其他地方声明 - 这意味着它们将被共享所有的调用。这本身足以使您的代码不安全。

您还应该使用Substring而不是像这样重复的字符串连接......

string primer = info.Value.Substring(0, 8);

除此之外,你的问题并没有真正包含足够的信息来帮助你 - 请阅读writing the perfect question并更加注意清晰度。