2010-04-23 3 views
4

확장 메서드 내에서 yield 연산자를 사용하면 스레드로부터 안전할까요? 예를 들어확장 메서드 내에서 'yield'연산자를 사용하면 스레드로부터 안전합니까?

:

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

참고 : 반환 값 그렇지 않으면 yield return 구문이 작성되지 않으므로 IEnumerable이어야합니다. –

+0

전에 고마워 했나요? hehehe : P +1 – SDReyes

답변

3

난 당신이 무슨 뜻인지 정확히 모르겠지만, 수율 수익은 기본적으로 상태 시스템 래퍼 클래스를 생성하는 기능을 원인과 클래스의 인스턴스를 반환합니다. 각 수익률 수익은 주 기계에서 반환됩니다. 메서드 호출에 의해 반환 된 개별 인스턴스는 스레드로부터 안전하지 않으며 다중 스레드에서 동시에 반복 할 수는 없지만 여러 호출은 별도의 인스턴스를 생성합니다. 이러한 별도의 인스턴스는 여러 스레드에서 사용할 수 있으며이 경우 스레드 안전은 열거 자에서 사용하는 클래스의 스레드 안전성에 따라 결정됩니다 (cart의 메서드).

+0

Dan 감사합니다. 당신은 내 질문에 대답했습니다 +1 어쨌든 더 간단한 독자를위한 나의 요점을 명확히하기 위해 예제를 사용하겠습니다;) – SDReyes

+0

새 예제 Dan에 따라 답변을 업데이트 해 주셔서 감사합니다. – SDReyes

관련 문제