Безопасность не гарантируется. Изменение элемента в списке увеличивает частное поле списка _version
, которое позволяет различным потокам определить, был ли список изменен. Если какой-либо другой поток попытается перечислить список или использует метод, подобный List<T>.ForEach()
, то потенциально может возникнуть проблема. Звучит так, как будто это было бы крайне редко, что не обязательно хорошо, на самом деле это делает самый сводящий с ума тип дефекта.
Если вы хотите быть в безопасности, создайте новый список вместо изменения существующего. Это распространенный «функциональный» подход к проблемам потоков, который позволяет избежать блокировок.
var newList = pointsList.AsParallel().Select( item => DoThing(item) );
Когда вы закончите, вы всегда можете заменить старый список, если хотите.
pointsList = newList.ToList();