How can I call a method from async method?

Hello,

I am trying to integrate admob to my mobile game. I want to call a function when admob request failed. But as I understand while callback function of admob request is async, it throws error.

error:

 get_main can only be called from the main thread.

My question is how can I call a normal method from this async method.

Here is my code

private void RequestInterstitial()
    {
        //Test device
#if UNITY_ANDROID
        string adUnitId = "ca-app-pub-3940256099942544/6300978111";
#elif UNITY_IPHONE
        string adUnitId = "ca-app-pub-3940256099942544/2934735716";
#else
        string adUnitId = "unexpected_platform";
#endif

  // Initialize an InterstitialAd.
        interstitial = new InterstitialAd(adUnitId);


        // Called when an ad request failed to load.
        interstitial.OnAdFailedToLoad += HandleOnAdFailedToLoad;
}

public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
    MonoBehaviour.print("HandleFailedToReceiveAd event received with message: "
                        + args.Message);
    interstitial.Destroy();
    //SceneManager.LoadScene(0);
    
    normalMethod();
    
  
}

ok, my solution is not elegant but it works. I created booleans like “bool callmethod” and set them false as deafult. I check them in every update, and if they true I call the method from update function and set boolean as false. as I said it is not elegant but it works.

Mike (aka @WhyDoIDoIt) once has created this simple Loom class which represents a simple way to queue an action on the main thread. I’ve created an “advanced” version that allows the the queueing thread to be blocked until the callback was processed on the main thread. Though in most cases the simple Loom version should work.

Just make sure before you queue something on another thread you have to call

Loom.Initialize();

on the main thread. So somewhere in Awake of one of your scripts. Now you can simply queue a method on the main thread like this:

Loom.QueueOnMainThread(someMethod);