How to output new data without expiring the component

After testing I’ve found this to be the solution:

this.Params.Output[0].ClearData();
this.Params.Output[0].AddVolatileDataList(new GH_Path(0), log);
this.ComputeData();
foreach (var outp in this.Params.Output)
    foreach (var recpt in outp.Recipients)
        recpt.ExpireSolution(true);

I’ve noticed a weird behaviour that I don’t understand tho, why can I not use ExpireDownStreamObject() ?
If I use ExpireDownStreamObject() my output becomes empty.
Isn’t looping thru all recipients and expiring them one by one the same as ExpireDownStreamObject()?