4

在扩展方法中使用 yield 运算符是线程安全的吗?

例如:

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

1 回答 1

3

我不完全确定您的意思,但 yield return 本质上会导致该函数生成一个状态机包装类并返回该类的一个实例。每个收益返回都是来自状态机的返回。调用您的方法返回的单个实例不是线程安全的(您不能同时从多个线程对其进行迭代),但多个调用会生成单独的实例。这些单独的实例可以由多个线程使用,并且在这种情况下的线程安全性由枚举器使用的类的线程安全性确定(cart在您的情况下是 's 方法。)

于 2010-04-23T23:31:11.757 回答