loading scenes with async issues.

Hello, I am trying to create a loading screen using LoadSceneAsync, however I seem to be getting some issues.

I have three scenes, main menu, the loading scene and the main scene. Currently the main scene has a button which when clicked calls a function that just calls the next seen to be loaded. However this change from main menu to the loading screen seems to be taking longer to load than the loading to game scene, even though the loading scene is basically empty. So it goes main menu, a slight freeze, loading scene for a split second and then into the game. It feels like that when the main menu calls the loading scene to load, it waits until that has also loaded the main game scene. The code for this is below could anyone please help me with where I may be going wrong with this

main menu - changeScenes is called by the button press.

    void Start()
    {       
    }
    public void changeScenes()
    {
        Debug.Log("change scenes");
        SceneManager.LoadScene(1);
    }

the loading scene

  void Start()
    {
        StartCoroutine(loadScenes());
        Debug.Log("loading scenes script");
    }



    IEnumerator loadScenes()
    {
        AsyncOperation loadMainScene = SceneManager.LoadSceneAsync(2);
        //loadMainScene.allowSceneActivation = false;

        while(loadMainScene.progress < 1)
        {
            yield return new WaitForEndOfFrame();
        }


       
    }

Hello, I have possibly narrowed down the issue but have not solved. Hoping maybe that now I have a bit more detail someone may know.

I have taken out the AsyncOperation call in the coroutine, and it works the at the speed it should. So it seems that when loading into the loading screen the AsyncOperation is running before the scene is even being shown? Is this possible?

Are you judging from how it behaves in editor? I seem to recall that in editor, timing is quite different for async scene loads.

Well I am sort of just basing it on its behaviour. When using the asyncOperation, there is a freeze between scene 1 and scene 2, and then when scene 2 finally loads it only last for a few ms before moving into scene 3. However, when I dont use the asyncOperation in scene 2, going from scene 1 to 2 only takes a split second since scene 2 is almost empty.
So to me it feels like when asyncOperation is being used, when the call is made in scene 1 to load scene 2 the asyncOperation runs, then displays the canvas element then moves onto scene 3.

So to sum (my explanation might have been slightly confusing)

When using asyncOperation in scene 2 it goes

scene1 → big pause → scene 2 → scene3 (2 - 3 very quickly)

When not using asyncOperation in scene 2

scene1 - scene2 (done very quickly)