5.2.1버전에서 외부스레드에서 콜백 발생 이슈

기존에는 뒤끝 콜백함수들은 Poll 을 통해 메인스레드에서 실행되는것으로알고 있는데요.

5.2.1 다운로드후 Backend.Initialize 의 콜백에서 오류가 발생했는데,

메인쓰레드가 아닌곳에서 GameObject 가 액세스되었다는것이었습니다.

혹시 모든 콜백이 이제 메인 쓰레드가 아닌곳에서 발생하는건가요?

기존 로직을 모두 변경해야하는것인지, 아니면 수정되는 이슈인지 궁금합니다.

안녕하세요 개발자님

Poll 함수를 이용하여 콜백이 온다는 말씀은 SendQueue를 사용하시고 계신 것 이신가요?

SendQueue에 삽입한 함수의 경우 메인쓰레드에서 실행되는 것이 맞습니다.

또한 비동기 함수의 경우에는 비동기 IO 쓰레드에서 콜백함수가 실행되기 때문에

해당 오류가 발생할 수 있습니다.

혹시 Initialize 함수를 어떤 형태로 호출하고 계시는지 공유가 가능하실까요?

그리고 아래 개발자 문서도 참고 부탁드리겠습니다.

감사합니다.

빠른 확인 감사합니다.

Backend.Initialize 이 함수는 다음과 같이 센드큐없이 바로 콜백을 실행하고 있었습니다.

    Backend.Initialize( bro => 
    {
        //bool isInit = Backend.IsInitialized;
        if (bro.IsSuccess() == false)
        {
            OnInit(false);
            return;
        }

        m_is_init = true;

        if (CheckServerStatus() == false) return;
        if (CheckVersion(OnInit) == false) return;

        if(SendQueue.IsInitialize == false)
        {
            // SendQueue 초기화
            SendQueue.StartSendQueue(true, SendQueueExceptionHandler);
        }

        OnInit(true); 
    });

참고로 OnInit 을 통해,

뒤끝 초기화에 성공하면 이후 UI개체를 컨트롤하는 부분에서 에러가 발생합니다.

문제는 이 코드가 5.2.0 버전에서는 문제없이 실행되고,

5.2.1 버전에서는 메인쓰레드가 아니라 에러가 발생한다는점입니다ㅠ

확인해보니, 5.2.0 버전에서 Initialize 는 콜백이 별도의 딜레이 없이

메인스레드에서 즉시 이루어지는것 같습니다.

그리고 일단 제가 poll 을통해 모든 콜백이 실행되는걸로 잘못인지하고 있었습니다.

그동안 일반 요청들에게서 오류가 발생하지 않은것이 좀 이상한것 같습니다.

요청들을 모두 센드큐를 활용하는 방향으로 수정하고자 합니다.

감사합니다.

안녕하세요 개발자님

개발자님께서 오늘 해주신 피드백과 다른 글에 fixincdev님께서 주신 글을 확인해보니

응답속도가 빨라진 것과 무관하게

기존 코드가 안되는 것은 개발사에서 많이 불편하실 것 같습니다.

SendQueue와 유사하게 비동기 콜백도 메인쓰레드에서 동작하는 업데이트를 금주 내로 추가 배포하겠습니다.

피드백 주셔서 감사합니다.

넵. 빠른 확인과 피드백 감사드립니다.