Как упомянул @John, вы должны использовать потокобезопасную коллекцию, такую как ConcurrentBag .
Или вы можете использовать мощь LINQ следующим образом:
var ALL_WORDS = _Input_Text.Split(_split_chars)
.AsParallel()
.Where(x => x.Length != 0 && x.Length <= 50 && !string.IsNullOrEmpty(x))
.ToList();
Примечание: как отметили @Matthew Watson и @bommelding, этот параллелизм не означает, что вы получите повышение производительности, вы должны измерять его с параллелизмом и без него.
@ Примечание Шаян Фирози:
Спасибо, ребята!
Как результат, да, вы правы, параллелизм не делает этот код быстрее, а иногда и делает его медленнее!
Но для меня было удивительнымскорость LINQ .Всегда учил, что LINQ намного медленнее, чем традиционный для / foreach , но в этом случае мой код работает на 50% быстрее !!