Skip to content

Conversation

@1eyewonder
Copy link
Contributor

Proposed Changes

  • Upgrade from net9.0 -> net10.0 in relevant areas.
  • Turning on analyzers in the IDE from the recent switch from paket to nuget
  • Some general versioning updates to keep health of the repo up to date

Types of changes

What types of changes does your code introduce to FsToolkit.ErrorHandling?
Put an x in the boxes that apply and remove ones that don't apply

  • New feature (non-breaking change which adds functionality)

Checklist

Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code.

  • Build and tests pass locally
  • I have added tests that prove my fix is effective or that my feature works (if appropriate)
  • I have added necessary documentation (if appropriate)

Further comments

If this is a relatively large or complex change, kick off the discussion by explaining why you chose the solution you did and what alternatives you considered, etc...

"version": "9.0",
"additionalVersions": "8.0"
"version": "10.0",
"additionalVersions": ["8.0", "9.0"]
Copy link
Contributor Author

@1eyewonder 1eyewonder Nov 15, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this is necessary but temporarily have it here

let! actual =
cancellableTaskResult {
use d = null
use d: IDisposableNull = null
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought this felt odd that this was complaining about the incompatible IAsyncDisposable vs IAsyncDisposable | null here. I locked it into IDisposableNull to allow me to continue building and testing other things

Copy link
Collaborator

@TheAngryByrd TheAngryByrd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I appreciate the work but we shouldn't replace net9.0 -> net10.0.

Things we should not do:

  • Replace net9.0 outright.
  • We shouldn't replace tfm net9.0 -> net10.0 in libraries (things under src)
    • This would be a breaking change
    • The reason you choose a TFM in libraries is because it brings a set of APIs you need.
      • In the case of netstandard2.1, it's because it provides IAsyncEnumerable/IAsyncDisposable/ValueTask natively
      • In the case of net6.0, it's because it provides PooliingValueTask support
      • In the case of 9.0, it's because of the Nullable/Nullness support in F# 9.0. (This is technically not a TFM limitation but an FSharp.Core version limitation. I didn't want to start forcing people to use FSharp.Core 9 on older TFMs so I drew a line in the sand at TFM 9.0)
      • The only reason we would want to build against 10.0 is the RuntimeAsync work. However, there's an F# compiler limitation at the moment, so we can't ship with this until that's fixed.
    • In either case, it would be additive and not remove the build target of net9.0

Things we can do:

  • Add (not replace) net10.0 to test projects if we want to see how they work against 10 runtime
  • Add net10.0 to benchmarks
  • Update the various infrastructure like docker/yml/global.json to support being able to run 10.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants