인프런 커뮤니티 질문&답변

asoft82님의 프로필 이미지

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

JobTimer

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

24.03.06 22:41 작성

·

158

·

수정됨

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

Rookiss님의 프로필 이미지
Rookiss
지식공유자

2024. 03. 06. 22:41

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

asoft82님의 프로필 이미지
asoft82
질문자

2024. 03. 06. 22:43

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

asoft82님의 프로필 이미지

작성한 질문수

질문하기