dotnet / dotnet/reactive

Split platform specific schedulers into separate packages

Open
#1,847 10 comments 17 reactions 0 assignees View on GitHub
[area] Rx
Dominant language
C#
Stars
7.2k
Forks
798
PR merge metrics
No merged PRs in 30d

Description

After the great Rx reunification the four main assemblies (Rx-Core, Rx-Interfaces, Rx-Linq, Rx-PlatformServices) were merged into a single assembly and package for more consistent versioning.

While it is definitely reasonable to unify Core+Interfaces+Linq into one assembly, I feel the step to fold the PlatformServices assembly into the mix might be causing more issues than it solves. Below is a list of open issues which can all ultimately be traced back to this design decision:
- https://github.com/dotnet/reactive/issues/1059
- https://github.com/dotnet/reactive/issues/1476
- https://github.com/dotnet/reactive/issues/1628
- https://github.com/dotnet/reactive/issues/1651
- https://github.com/dotnet/reactive/issues/1745

Especially when considering the large number of platforms that Rx tries to target, I feel the platform-specific schedulers make everything more complicated both for consumers who just want to make their own libraries of platform-agnostic operators, and for app developers who may end up inadvertently with a more confusing dependency tree.

It also makes everything more confusing when the surface of an API significantly changes depending on which platform you target.

Going forward I propose that we separate out the platform-specific schedulers into independent packages for each UI framework (e.g. WinForms, WPF / UWP, etc) and have them be explicitly installed on a per-project basis rather than bundled in with `System.Reactive` depending on specific target frameworks.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.