代码之家  ›  专栏  ›  技术社区  ›  SDReyes

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

  •  4
  • SDReyes  · 技术社区  · 15 年前

    例如:

    public static IEnumerable<CartItem> GetItems( this Cart cart )
    {
            {
                while( cart.hasNext() )
                    yield return cart.GetNextItem( );
            }
    }
    
    1 回复  |  直到 15 年前
        1
  •  3
  •   Dan Bryant    15 年前

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