R3 is the latest evolution of RX for .NET
published on 2024/01/09
I have over 10 years of experience with Rx, experience in implementing a custom Rx runtime (UniRx) for game engine, and experience in implementing an asynchronous runtime (UniTask) for game engine. Based on those experiences, I came to believe that there is a need to implement a new Reactive Extensions for .NET, one that reflects modern C# and returns to the core values of Rx.
- Stopping the pipeline at OnError is a billion-dollar mistake.
- IScheduler is the root of poor performance.
- Frame-based operations, a missing feature in Rx, are especially important in game engines.
- Single asynchronous operations should be entirely left to async/await.
- Synchronous APIs should not be implemented.
- The Necessity of a subscription list to prevent subscription leaks (similar to a Parallel Debugger)
- Backpressure should be left to IAsyncEnumerable and Channels.
- For distributed processing and queries, there are GraphQL, Kubernetes, Orleans, Akka.NET, gRPC, MagicOnion.