平行foreach字符数组空白



我正在尝试创建一个并行foreach循环来处理fasta文件。我已经将fasta文件加载到ConcurrentDictionary中foreach设置,但当我处理ConcurrentDictionary时,我的char数组引发一个关于为空的错误,即使ConcurrentDictionary值从不空白。我试着调试,但由于有多个线程,这非常困难告诉我发生了什么。非常感谢。Casey

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];
        } ...

您没有在lambda表达式中声明linename等,这表明它们是在其他地方声明的,这意味着它们将被所有调用共享。这本身就足以使代码变得不安全。

您还应该使用Substring,而不是像这样重复串接。。。

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

除此之外,你的问题并没有包含足够的信息来帮助你进一步——请阅读写下完美的问题,并更加注意清晰度。

最新更新