Я полагаю, что самая большая причина в том, что запрос параллельной очереди (где два или более потока всегда манипулируют содержимым) для подсчета количества элементов является ошибочной концепцией для начала. Я подозреваю, что они только предоставили свойство Count для соответствия существующим интерфейсам. Таким образом, если единственная причина существования API-интерфейса - это требование к интерфейсу, то кого это волнует, так как вам не следует использовать его с самого начала.
При работе с объектами, которые изменены несколькими потоками, никогда не следует спрашивать объект о каком-либо состоянии / значении, которое другой поток может изменить. Поскольку к тому времени, когда на ваш вопрос ответят, он может перестать быть правильным ответом. Это похоже на фундаментальную проблему в свойстве WinForm «InvokeRequired». Некоторые API - это просто плохая идея в многопоточной среде, и я думаю, что это число относится к этой категории.
В конечном счете, довольно странно, что разработчики не использовали явный элемент интерфейса для свойства ICollection.Count, а не делали его общедоступным. Тогда, по крайней мере, вы знаете, что не должны его использовать. Они указали использовать IsEmpty на MSDN; однако это легко не заметить.