With .NET core 2.0+ this is as efficient as the ugly code we've been using.
Allows progressing forwards in the interface