Abstract the OS
Abstracting the OS - The pain felt of not listening to my own practices.
I'm trying to shift my website to run on a linux app service plan instead of windows. It'll save me $40+ per month, so... worth it. That's 4 extra boxes of booster packs I can get at the end of the year!!!
Anyway... I had to make a code change. Named Semaphore are not allowed on linux.
#if TARGET_UNIX || TARGET_BROWSER
if (name != null)
throw new PlatformNotSupportedException(SR.PlatformNotSupported_NamedSynchronizationPrimitives);
#endif
And throw it does.
I normally have the Semaphore wrapped in my Monostate objects, like my HttpClient
public sealed class MonoStateConfig : IConfig
{
private static readonly Semaphore s_setOnce = new(1, 1, $"{nameof(MonoStateConfig)} set once");
...
}
There was something about me being lazy and not wanting to deal with it. I was alternating between Sync and Async methods; and the versions I've used in the past were annoying me and I wanted to make progress.
While I don't have a lot of monostate objects, I have more than one. I have to go update EVERY SINGLE SEMAPHORE to no longer use the named constructor. Did I get them all? I Don't Know. I can't be sure. I mean... I CAN be because it's my code, all my code.
Normally I can't. But I have to go make changes to multiple files; a large scope of change; because 1 thing is changing.
A single concept has multiple places it has to change due to shifting platforms. Going into Azure, changing from a windows to linux host shouldn't be an outrageous thing. It should all be the same to my code. It's not. Clearly.
There's not a single place I can correct the Semaphore issue. I MUST go change many places.
If I'd wrapped it; created that Abstraction - LIKE I PREFER - single file and fixed everywhere.
BUT NOOOOO..... I didn't. I should. There's a reason I abstract OS components, like HttpClient and Semaphore. It introduces a SINGLE POINT OF TRUTH - a SPOT for changes.
Anyway... that's all I got. Found it amusing that I hit a real world scenario where not following my practice bit my ass.