SynchronizedCollection.Add throws an ArgumentOutOfRangeException

During concurrent calls to Add and Remove on a SynchronizedCollection instance, Add throws an ArgumentOutOfRangeException with the message "Index must be within the bounds of the List. Parameter name: index".

This was with mono 4.4.1 originally, and a quick check of the code on your github master branch ( ) shows that this may be because Add reads its backing list's count outside of a lock, and passes that to InsertItem.

Example code attached. Reproduces almost every run with mono, never with .NET 4.6.