我正在尝试创建一个并行的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];
} ...
答案 0 :(得分:7)
您在lambda表达式中未声明line
,name
等事实表明它们已在其他地方声明 - 这意味着它们将被共享所有的调用。这本身足以使您的代码不安全。
您还应该使用Substring
而不是像这样重复的字符串连接......
string primer = info.Value.Substring(0, 8);
除此之外,你的问题并没有真正包含足够的信息来帮助你 - 请阅读writing the perfect question并更加注意清晰度。