Я не совсем уверен, что вы имеете в виду, но возвращение yield по сути заставляет функцию генерировать класс-обертку конечного автомата и возвращает экземпляр этого класса. Каждый возврат доходности - это возврат от конечного автомата. Отдельный экземпляр, возвращаемый вызовом вашего метода, не будет потокобезопасным (вы не можете выполнять итерации по нему одновременно из нескольких потоков), но несколько вызовов будут генерировать отдельные экземпляры. Эти отдельные экземпляры могут использоваться несколькими потоками, и безопасность потока в этом случае определяется безопасностью потока классов, используемых перечислителем (в вашем случае методы cart
).