Method called but not working?

I have created a simple Email/password authentication system using Firebase.
Everything works fine until I successfully log in and get all the expected logs in the console, then the script is supposed to taken me to another scene via a simple method.
The method seems not to work correctly since I’m not being taken to the expected scene but I do see the log from that method.
Any ideas?

using UnityEngine;
using UnityEngine.SceneManagement;
using TMPro;
using Firebase;
using Firebase.Auth;
using Firebase.Firestore;
using System.Collections.Generic;

public class AuthenticationEmail : MonoBehaviour
{
    [Header("UI References")]
    public TMP_InputField emailInputField;
    public TMP_InputField passwordInputField;
    public GameObject signInButton;
    public TextMeshProUGUI errorText;

    FirebaseAuth auth;
    FirebaseFirestore firestore;

    void Start()
    {
        auth = FirebaseAuth.DefaultInstance;
        firestore = FirebaseFirestore.GetInstance(FirebaseApp.DefaultInstance);
    }

    public void SignInWithEmail()
{
    string email = emailInputField.text;
    string password = passwordInputField.text;

    auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task =>
    {
        if (task.IsCanceled)
        {
            Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
            return;
        }

        if (task.IsFaulted)
        {
            Debug.Log("Email or password incorrect");
            errorText.text = "Email or password incorrect";
            return;
        }

        FirebaseUser newUser = task.Result.User;
        Debug.Log("User signed in successfully with email/password! Player ID: " + newUser.UserId);
        GoToWheelScene(); // Call GoToWheelScene after successful sign-in
    });
}

    public void CreateAccount(string email, string password)
    {
        auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task =>
        {
            if (task.IsCanceled)
            {
                Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled.");
                return;
            }
            if (task.IsFaulted)
            {
                Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception);
                return;
            }

            FirebaseUser newUser = task.Result.User;
            Debug.Log("User created successfully! Player ID: " + newUser.UserId);

            // Save user data to Firestore
            DocumentReference userRef = firestore.Collection("players").Document(newUser.UserId);
            Dictionary<string, object> userData = new Dictionary<string, object>
            {
                { "email", email }
            };
            userRef.SetAsync(userData).ContinueWith(saveTask =>
            {
                if (saveTask.IsFaulted)
                {
                    Debug.LogError("Failed to save user data to Firestore: " + saveTask.Exception);
                    return;
                }
                Debug.Log("User data saved to Firestore.");
            });

            GoToWheelScene();
        });
    }

    public void GoToWheelScene()
    {
        Debug.Log("GoToWheelScene Executed here!");
        SceneManager.LoadScene("2. Wheel");
    }
}

Threading and Unity API methods don’t work together , async methods can be called from other threads and that’s a no-no for methods such as SceneManager.LoadScene.
A quick fix would be to have some kind of MainThreadCallback singleton like so

public class MainThreadCallback : MonoBehaviour
{
    private static Queue<Action> queue = new Queue<Action>();

    public static void Enqueue(Action callback) 
    {
        queue.Enqueue(callback);
    }

    private void Update()
    {
        while(queue.TryDequeue(out Action callback))
        {
            callback?.Invoke();
        }
    }
}

This will help you defer the execution of the code by the main thread to the next frame.
In your GoToWheelScene you just do this

public void GoToWheelScene()
{
        MainThreadCallback.Enqueue(() => 
        {
               Debug.Log("GoToWheelScene Executed here!");
               SceneManager.LoadScene("2. Wheel");
       });
}

Also , i noticed that exceptions aren’t sent to the console if they are triggered during async execution , so make sure to wrap in a try catch block and Debug.Log the exception in the catch block to actually get them in the console.

Some extra context on top of bloodthirst’s reply:
You should never use async methods without awaiting the Task they return. Avoiding doing so may result in exceptions thrown within them to be swallowed.
I elaborate about this a bit more here.

I have fixed the issue by adding an IEnumerator this way:

public void SignInWithEmail()
{
    string email = emailInputField.text;
    string password = passwordInputField.text;

    StartCoroutine(SignInWithEmailCoroutine(email, password));
}

private IEnumerator SignInWithEmailCoroutine(string email, string password)
{
    Task<AuthResult> signInTask = auth.SignInWithEmailAndPasswordAsync(email, password);
    yield return new WaitUntil(() => signInTask.IsCompleted);

    if (signInTask.IsCanceled)
    {
        Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
        yield break;
    }

    if (signInTask.IsFaulted)
    {
        Debug.Log("Email or password incorrect");
        errorText.text = "Email or password incorrect";
        yield break;
    }

    FirebaseUser newUser = signInTask.Result.User;
    Debug.Log("User signed in successfully with email/password! Player ID: " + newUser.UserId);
    GoToWheelScene();
}

public void GoToWheelScene()
{
    Debug.Log("GoToWheelScene Executed here!");
    SceneManager.LoadScene("2. Wheel");
}

This can be locked, thanks.