While the answer to this question is excellent, it implies that you should surround calls to List.ToArray() in a lock for concurrency. this blog post also implies that it c
List does not support being modified while it is enumerated. When enumerating a list, the enumerator checks if the list has been modified after each iteration. Calling List.ToArray before enumerating the list solves this problem, as you're enumerating a snapshot of the list then and not the list itself.
List is not a thread-safe collection. All of the above assumes access from the same thread. Accessing a list from two threads always requires a lock. List.ToArray is not thread-safe and doesn't help here.