I had a look at RX; surprising it uses (at least) the jargon of GOF/Java Observer (wrong design IMO) and that they did not go for the Delegate FP approach.
More generally, design patterns using delegates is much more flexible than using OOP approach. The issue is function signature and how to implement it.
For OP, in a multi-threaded solution you could use hand-crafted EventWaitHandles.