Apparently, the issue was caused by not instantiating the assets from the main thread. 

I made a custom implementation for forcing the method to run in the main thread, and it is now solved.

This is the class that I created to force a method to run in the main thread:

    using System.Collections.Generic;
    using UnityEngine;

    public class UnityMainThreadDispatcher : MonoBehaviour
    {
    public static UnityMainThreadDispatcher _instance;
    private static Queue<System.Action> _actionQueue = new 
       Queue<System.Action>();

    private void Awake()
    {
        if (!Application.isBatchMode)
        {
            Destroy(this.gameObject);
        }

        if (_instance != null)
        {
            Destroy(gameObject);
        }
        else
        {
            _instance = this;
            DontDestroyOnLoad(gameObject);
        }
    }

    void Update()
    {
        lock (_actionQueue)
        {
            while (_actionQueue.Count > 0)
            {
                _actionQueue.Dequeue().Invoke();
            }
        }
    }

    public void ExecuteOnMainThread(System.Action action)
    {
        lock (_actionQueue)
        {
            _actionQueue.Enqueue(action);
        }
    }
    }

  
Then, for all the code that I want to force to the main thread, I use this:

            UnityMainThreadDispatcher._instance.ExecuteOnMainThread(async () =>
        {
           // Enter code here
        });