MonoBehaviour isActiveAndEnabled yet error Coroutine couldn't be started because the the game object 'xxx' is inactive!

Here is my code. I check .isActiveAndEnabled before calling StartCoroutine. Still I get that error.

public static class MonoBehaviourRunDelayedExt {
        public static IEnumerator DelayedCoroutine(float delay, Action a) {
            yield return new WaitForSeconds(delay);
            a();
        }

        public static Coroutine RunDelayed(this MonoBehaviour mono, float delay, Action a) {
            if (mono == null || !mono.isActiveAndEnabled) return null;
            // The following line prints error message: Coroutine couldn't be started because the the game object 'xxx' is inactive!
            return mono.StartCoroutine(DelayedCoroutine(delay, a));
        }
}

It happens when changing scene or stopping play mode in Unity Editor. A monobehaviour calls RunDelayed and subsequently StartCoroutine in its OnDisable callback.

Any ideas why this happens? I’m on 2019.4.23f1.

Here is the full stack trace (I doubt it contains anything useful).

Coroutine couldn't be started because the the game object 'VisualGameEngine' is inactive!
UnityEngine.MonoBehaviour:StartCoroutine (System.Collections.IEnumerator)
NoSuchStudio.Common.MonoBehaviourRunDelayedExt:RunDelayed (UnityEngine.MonoBehaviour,single,System.Action) (at Assets/Plugins/nosuchstudio/Common/Runtime/MonoBehaviourRunDelayedExt.cs:48)
NoSuchStudio.Common.NoSuchMonoBehaviour:RunDelayed (single,System.Action) (at Assets/Plugins/nosuchstudio/Common/Runtime/NoSuchMonoBehaviour.cs:83)
CasinoPersia.Shelem.VisualGameEngine:StepDeferred (single) (at Assets/Scripts/Shelem/Runtime/VisualGameEngine.cs:628)
CasinoPersia.Shelem.VisualGameEngine/LocalGameAgent:b__7_0 () (at Assets/Scripts/Shelem/Runtime/VisualGameEngine.cs:878)
CasinoPersia.Shelem.VisualGameEngine/<>c__DisplayClass77_0:b__0 (CasinoPersia.View.VisualCardCollection) (at Assets/Scripts/Shelem/Runtime/VisualGameEngine.cs:608)
CasinoPersia.View.VisualCardCollection/<>c__DisplayClass62_0:b__0 (UnityEngine.Events.UnityAction`1) (at Assets/Scripts/CasinoPersia/Runtime/view/VisualCardCollection.cs:237)
System.Collections.Generic.List`1<UnityEngine.Events.UnityAction`1>:ForEach (System.Action`1<UnityEngine.Events.UnityAction`1>)
CasinoPersia.View.VisualCardCollection:ProcessOneshots (CasinoPersia.View.VisualCardCollection) (at Assets/Scripts/CasinoPersia/Runtime/view/VisualCardCollection.cs:237)
CasinoPersia.View.VisualCardCollection:b__65_0 (CasinoPersia.View.VisualCardCollection,CasinoPersia.View.VisualAnimation/AnimationEventType) (at Assets/Scripts/CasinoPersia/Runtime/view/VisualCardCollection.cs:273)
UnityEngine.Events.UnityEvent`2:Invoke (CasinoPersia.View.VisualCardCollection,CasinoPersia.View.VisualAnimation/AnimationEventType)
CasinoPersia.View.VisualCardCollection:CardAnimationHandler (CasinoPersia.View.VisualAnimation,CasinoPersia.View.VisualAnimation/AnimationEventType) (at Assets/Scripts/CasinoPersia/Runtime/view/VisualCardCollection.cs:229)
UnityEngine.Events.UnityEvent`2:Invoke (CasinoPersia.View.VisualAnimation,CasinoPersia.View.VisualAnimation/AnimationEventType)
CasinoPersia.View.VisualAnimation:StopAnimation () (at Assets/Scripts/CasinoPersia/Runtime/view/VisualAnimation.cs:72)
CasinoPersia.View.VisualAnimation:OnDisable () (at Assets/Scripts/CasinoPersia/Runtime/view/VisualAnimation.cs:66)

The gameobject where your script is on is not active when you’re trying to start the coroutine. you have to first enable your gameobject before starting your coroutine