비동기함수 문의 드립니다.

BackendAsyncClass.InitializeAsyncQueue()
BackendAsyncClass.StartAsyncQueueThread()

스레드에 대한 핸들러를 비동기나 동기로 받을 수 없을까요?
unity 데이터에서만 이라도…
뒤끝 매치를 테스트 하면서 스레드가 들어가고 나서는 유니티 에디터가 엄청나게 자주 뻗는 현상이 발생합니다 ㅠㅠ
너무 자주 죽어서… 어느정도 계속 죽다보면 컴퓨터까지 부팅을 해야 켜지는 현상이 일어납니다.

안녕하세요 개발자님

1
우선 뒤끝매치에서는 별도의 쓰레드를 사용하지 않습니다.

2
그리고 비동기 큐의 경우 별도의 쓰레드를 사용하고

비동기 함수에 삽입한 모든 함수들은 모두 비동기로 동작합니다.

스레드의 핸들러를 동기나 비동기로 받는 다는 말씀은 어떤 것을 말씀하시는 것인지 잘 모르겠습니다.

비동기 큐에서 발생하는 에러를 동기 혹은 비동기 이벤트로 받고 싶다는 말씀이신가요?

비동기 큐에서 동작 중 만약 에러가 발생한다면 비동기 큐를 초기화 할 때 인자값으로 준 delegate가 호출되게 됩니다. 여기서 에러를 처리하면 어떠실까요?

3
비동기 큐를 도입하시고 에디터가 죽는 현상이 발생한다고 하셨는데
혹시 OnApplicationQuit 에서 비동기 큐 중단 및 쓰레드 삭제 함수를 호출하고 계신가요?

에디터에서는 에디터를 플레이버튼을 눌러 게임 실행을 멈추어도 메인쓰레드는 계속 동작하고 있어 비동기 큐 쓰레드가 자동으로 삭제되지 않아

쓰레드 삭제 함수를 꼭 명시적으로 호출하셔야 합니다.

4
마지막으로 현재 비동기 큐의 경우 말씀하신 것처럼 사용이 어렵고,

사용자 측면에서 제어가 어려운 면이 있어

다음주에 비동기큐를 대체할 새로운 기능이 출시 될 예정입니다.

이용에 어려움을 드려 죄송합니다.

지금 프로젝트에서 비동기 큐의 쓰레드를 사용하고 있습니다.
제가 문의 드린 부분은 비동기 큐를 생성시에 쓰레드를 사용하는 것으로 알고있는데 이 쓰레드를 생성하는 시점에 쓰레드의 핸들을 컨트롤 하고 싶어서 문의 드렸습니다.

OnApplicationQuit()
{
if (backendAsyncQueueState == BackendAsyncQueueState.Running)
{
try
{
StopAsyncQueueThread();
}
catch (Exception e)
{
Debug.Log(e.ToString());
}
}
}

이렇게 사용중이고 에디터 상에서도

EditorApplication.update += BackendThreadDispatcher;
private static void BackendThreadDispatcher()
{
if (playModeState == PlayModeStateChange.EnteredPlayMode)
return;

    if (backendAsyncQueueState == BackendAsyncQueueState.Running)
    {
        //UnityEngine.Debug.Log(backendAsyncQueueState);
        UnityEngine.Debug.Log("<color=red>Try StopAsyncQueueThread</color>");

        try
        {
            StopAsyncQueueThread();
        }
        catch (Exception e)
        {
            UnityEngine.Debug.LogError(e.ToString());
        }
    }
}

에디터 업데이트에서도 처리하고 있으나 StopAsyncQueueThread(); 호출 후에도 에디터가 뻗는 현상이 보여서 쓰레드가 정리가 제대로 이루어지지 않는 부분이 있는것 같아 문의 드렸습니다.