Program Club

ConcurrentDictionary.TryAdd가 실패 할 수 있습니까?

proclub 2020. 11. 24. 20:25
반응형

ConcurrentDictionary.TryAdd가 실패 할 수 있습니까?


이것은 학문적 질문에 가깝지만 ConcurrentDictionary.TryAdd가 실패 할 수 있습니까? 그렇다면 어떤 경우에 왜?


예, 다음과 같은 조건이 있습니다 ( msdn에서 제공 ).

  • ArgumentNullException- 키가 null 참조 인 경우
  • OverflowException- 최대 요소 수에 도달했을 때
  • 동일한 키를 가진 요소가 이미 존재하면 false를 반환 합니다.

다시 말하지만 이것은 동시성과 관련이 없습니다. 동시에 항목을 삽입하는 두 개의 스레드에 대해 걱정하면 다음과 같은 상황이 발생할 수 있습니다.

  • 키가 다르면 두 삽입 모두 잘 작동합니다.
  • 하나의 삽입은 제대로 작동하고 true를 반환하고 다른 삽입은 예외없이 실패하고 false를 반환합니다. 이것은 두 개의 스레드가 동일한 키로 항목을 삽입하려고 시도하고 기본적으로 하나만 이기고 다른 하나가지는 경우에 발생합니다.

물론 가능합니다. 키가 이미있는 경우 메서드는 false를 반환합니다.

참고 : http://msdn.microsoft.com/en-us/library/dd267291.aspx

반환 값 형식 : System.Boolean 키 / 값 쌍이 ConcurrentDictionary에 성공적으로 추가 된 경우 true입니다. 키가 이미있는 경우이 메서드는 false를 반환합니다.


키가 이미 사전에 있으면 실패합니다.

메모리가 부족하여 값을 추가 할 수없는 경우 대신 예외가 발생합니다.

참고 URL : https://stackoverflow.com/questions/11501931/can-concurrentdictionary-tryadd-fail

반응형