Да, вы в безопасности.Если вы посмотрите на определение ToList (), то это:
public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
return new List<TSource>(source);
}
Итак, по сути, вы создаете новый список, который содержит элементы старого списка, все под блокировкой, которую вы предоставляете, что обеспечивает безопасность потока.,
Теперь СОДЕРЖАНИЕ списка будет одинаковыми ссылками в обоих списках, поэтому оно не защитит вас от изменения оригинальных объектов, хранящихся в списке, а только самого списка.