Не используйте TInterfaceList
в качестве базового класса.
Если вы выполняете однопоточную работу, вы можете просто использовать TList<I: IInterface>
. Производительность была бы лучше, поскольку нет внутренней блокировки.
Если вы выполняете многопоточную работу, открытый интерфейс TInterfaceList
не подходит, как и концепция перечислителей, поскольку они реализованы в VCL. Для обсуждения лучшего API для безопасной итерации по коллекции вещей смотрите этот пост .
Если вы делитесь списком интерфейсов между потоками, вы должны заблокировать его как можно короче. Хороший способ сделать это - реализовать потокобезопасный метод, который возвращает массив интерфейсов вызывающему потоку, который затем можно безопасно перебирать, не сохраняя исходный список заблокированным.