本文讲述了关于C#:Parallel.For中StringBuilder的线程安全!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:
我创建了一个结构,例如AStruct,并覆盖了它的ToString()方法。 然后,我编写了一个并行函数以返回一些AStruct并将它们放在列表中,以便可以使用StreamWriter来输出它们,例如
StreamWriter sw = new StreamWriter(@"ABC.txt");
StringBuilder sb = new StringBuilder();
List<AStruct> AList = new List<AStruct>();
Parallel.For(0,10,i => // generate 10 AStruct(s)
{
AList.Add(DoSomethingThatReturnsAStruct);
});
for(int i =0; i< AList.Count();i++) //put in a StringBuilder
{
sb.AppendLine(AList[i].ToString());
}
sw.Write(sb.ToString());
sw.Close();
问题在于输出文件仅打印7/8行AList,而AList实际上得到了所有10个元素。 我想知道这是否与StringBuilder的线程安全有关。 有人可以解释为什么不输出所有行吗?
相关讨论
它不是Stringbuilder多数民众赞成在这里的问题,其List< T >多数民众赞成在并行操作。
@IanMercer不,不是,再次阅读他的问题,尤其是最后一段。 而AList实际上获得了所有10个元素。
@kchpchan 1,10在Parallel.For生成9个元素,而不是10个,做0.1或1,11
@CSharpie-可能在逐步调试时。 List < T >对于Add不是线程安全的。 首先解决。
该代码是否被try catch包围? 捕获通用异常还是ArgumentOutOfRange异常?
更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。
想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!