Является ли потокобезопасным использование оператора yield в методе расширения? - PullRequest
4 голосов
/ 24 апреля 2010

Будет ли потокобезопасным использование оператора yield внутри метода расширения?

Например:

public static IEnumerable<CartItem> GetItems( this Cart cart )
{
        {
            while( cart.hasNext() )
                yield return cart.GetNextItem( );
        }
}

1 Ответ

3 голосов
/ 24 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...