Skipping the base implementation of ExpireDownStreamObjects() stops component from recomputing with ExpireSolution(true)

As the title says, skipping the base implementation of ExpireDownStreamObjects() by doing something like:

protected override void ExpireDownStreamObjects()
    {
        if(false_if_something_happens)
        {
            base.ExpireDownStreamObjects();
        }
    }

will skip recomputation even if SolutionExpired(true) has been called before.

Is there something that one needs to implement in order to successfully stop Downstream Components from expiring?

P.S. I have tried scheduling a solution, but that hasn’t worked either.

Well, if you want to not expire downstream objects, then that is the correct method to override.

In a GH_Component, the base method does nothing more than calling param.ExpireSolution(false) on all its outputs. What class are you inheriting from exactly?

I’m using the standard Grasshopper Template for Visual Studio, so I’m inheriting from GH_Component.