2010-04-23 15 views
4

Serait-il compatible avec les threads d'utiliser l'opérateur de rendement dans une méthode d'extension?Est-ce que les threads peuvent utiliser l'opérateur 'yield' dans une méthode d'extension '?

Par exemple:

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

FYI, la valeur de retour doit être un IEnumerable, sinon la syntaxe return return ne sera pas générée. –

+0

Est-ce que je vous ai déjà remercié? hehehe: P +1 – SDReyes

Répondre

3

Je ne suis pas sûr de ce que vous voulez dire, mais le retour de rendement provoque essentiellement la fonction de générer une machine d'état classe wrapper et renvoie une instance de la classe. Chaque rendement est un retour de la machine d'état. L'instance individuelle renvoyée par un appel à votre méthode ne serait pas thread-safe (vous ne pouvez pas itérer simultanément sur plusieurs threads), mais plusieurs appels généreraient des instances distinctes. Ces instances séparées peuvent être utilisées par plusieurs threads et la sécurité de thread dans ce cas est déterminée par la sécurité de thread des classes utilisées par l'énumérateur (dans votre cas, cart).

+0

Merci Dan. vous avez répondu à ma question +1 En tout cas, permettez-moi d'utiliser un exemple plus simple pour clarifier mon point de vue pour d'autres lecteurs; – SDReyes

+0

Merci de mettre à jour votre réponse en conséquence au nouvel exemple, Dan. – SDReyes