System.Threading.Channels, but having it as a singleton that used by both the Web API and Worker doesn't makes sense to me, as I suppose the class will be created twice on the Web API and on Worker (or did I got it wrong?).System.Threading.Channels the best way to achieve this? On other language, I'd use channel in Go and std::sync::mpsc in Rust.