Я создал структуру, скажем AStruct
, и переопределяет ее метод ToString()
. Тогда я написал параллель, чтобы вернуть некоторые AStruct
и поместить их в список, так что я могу использовать StreamWriter
выводить их, какБезопасность потоков StringBuilder в Parallel.For
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', который управляется параллельно. –
@IanMercer нет его нет, прочитайте его вопрос, особенно последний абзац. _while AList фактически получил все 10 элементов ._ – CSharpie
@kchpchan 1,10 в Parallel.For создает 9 элементов, а не 10, либо делает 0,10, либо 1,11 – CSharpie