• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

GameRoom.Flush() 수행 중에 _sessions가 변경 되면, 컬렉션 변경 에러가 나옵니다.

24.03.06 22:41 작성 24.03.06 22:42 수정 조회수 91

0

// GameRoom.cs
public void Flush()
{
    foreach (ClientSession s in _sessions)
        s.Send(_pendingList);

    _pendingList.Clear();
}

foreach를 돌며 s.Send()를 하는 와중에

_sessions가 변경되면,
(_sessions.Add 되거나 _sessions.Remove 되면)

아래와 같이 컬렉션 변경 에러가 나옵니다.

 

이를 해결하려고 아래와 같이 _sessions를

_sessionsCopy에 복사하여 foreach 돌렸습니다.

// GameRoom.cs
public void Flush()
{
    List<ClientSession> _sessionsCopy = _sessions.ToList(); // 복사

    foreach (ClientSession s in _sessionsCopy)
        s.Send(_pendingList);
            
    _pendingList.Clear();

    _sessionsCopy = null;
}

 

더 좋은 방법이 있을까요?

답변 1

답변을 작성해보세요.

0

네 실제로 저렇게 하시면 됩니다.

asoft82님의 프로필

asoft82

질문자

2024.03.06

오... 빠른 답변 감사합니다.