在擴展方法中使用yield運算符會是線程安全的嗎?在擴展方法中使用'yield'運算符是線程安全的嗎?
例如:
public static IEnumerable<CartItem> GetItems(this Cart cart)
{
{
while(cart.hasNext())
yield return cart.GetNextItem();
}
}
在擴展方法中使用yield運算符會是線程安全的嗎?在擴展方法中使用'yield'運算符是線程安全的嗎?
例如:
public static IEnumerable<CartItem> GetItems(this Cart cart)
{
{
while(cart.hasNext())
yield return cart.GetNextItem();
}
}
我不太明白你的意思,但收益率迴歸本質導致函數產生一個狀態機的包裝類,並返回類的一個實例。每個收益回報是來自狀態機的回報。通過調用您的方法返回的單個實例不會是線程安全的(您不能同時從多個線程迭代它),但多個調用會生成單獨的實例。那些單獨的實例可以被多個線程使用,並且在這種情況下線程安全性由枚舉器使用的類的線程安全性確定(在您的情況下爲cart
的方法)。
FYI,返回值必須是一個IEnumerable,否則yield return語法不會生成。 – 2010-04-23 23:39:20
我以前感謝過你嗎? hehehe:P +1 – SDReyes 2010-04-23 23:47:07