Back to blog

.NET 11 Preview 1: What Caught My Eye

| 4 min read

Microsoft just shipped .NET 11 Preview 1, and there’s a lot to unpack. This is a preview release, not production-ready, but it gives a clear picture of where the platform is heading. Here’s what stood out to me.

Runtime: Async Gets a Rethink

The headline feature is Runtime Async, a fundamental change to how async/await works under the hood. Today, every async method allocates a state machine object on the heap. Runtime Async moves this into the runtime itself. That means fewer allocations and real performance gains for async-heavy workloads. If you’re building services that do a lot of I/O (and in .NET, that’s most of us), this is worth watching.

Alongside this, CoreCLR now runs on WebAssembly. Previously, Blazor WebAssembly used the Mono runtime. Moving to CoreCLR brings better performance and closer parity with server-side .NET behavior. For .NET MAUI, CoreCLR is now also the default runtime on Android.

Libraries: Practical Additions

The libraries team delivered several additions that address real-world needs:

Zstandard compression (System.IO.Compression) is now built in. Zstandard offers better compression ratios than gzip at similar speeds. If you’re compressing data for storage or transit, this is a welcome addition without needing third-party packages.

BFloat16 is a new 16-bit floating-point type built for machine learning workloads. If you’re doing ML inference in .NET, this gives you a native type that matches what most ML models use internally.

FrozenDictionary collection expressions let you create FrozenDictionary and FrozenSet using collection expression syntax, making immutable lookup tables cleaner to write:

FrozenDictionary<string, int> statusCodes = [
new("OK", 200),
new("NotFound", 404),
new("InternalServerError", 500)
];

Other notable additions:

  • MediaTypeMap for MIME type lookups, so you can stop hardcoding content types
  • Hard link creation APIs via File.CreateHardLink
  • Happy Eyeballs support in Socket.ConnectAsync for faster dual-stack connections
  • HMAC/KMAC verification methods for cleaner cryptographic validation

SDK and Tooling

The developer experience improvements are subtle but appreciated:

dotnet run now supports interactive target framework selection. If your project multi-targets, it’ll prompt you to choose instead of failing or picking one silently.

dotnet watch got hot reload for reference changes and configurable ports, making the inner dev loop smoother.

dotnet test now accepts positional arguments, so dotnet test MyTests works instead of requiring the full --project flag.

ASP.NET Core and Blazor

Several quality-of-life improvements for web developers:

EnvironmentBoundary component lets you conditionally render Blazor components based on the hosting environment. Great for showing debug panels only in development.

QuickGrid OnRowClick adds row-level click handling to the built-in grid component, which was a common request.

Blazor WebAssembly now supports IHostedService, letting you run background tasks in the browser. Think periodic data refresh or WebSocket keep-alive.

On the API side, OpenAPI gets binary file response schema support, and there’s a new IOutputCachePolicyProvider interface for more flexible output caching strategies.

Entity Framework Core

EF Core gets some solid improvements:

Complex types and JSON columns now work with TPT/TPC inheritance. Previously you had to choose between these features, which was a frustrating limitation.

Single-step migration creation and application means dotnet ef migrations add can now also apply the migration in one command. No more create-then-update dance.

Azure Cosmos DB transactional batches and bulk execution bring better performance for Cosmos DB workloads.

C# Language

C# picks up collection expression arguments, extending the collection expression syntax to support constructor parameters. This makes initializing collections with specific capacities or comparers more natural.

F# Gets Faster

The F# compiler now has parallel compilation enabled by default, which should noticeably speed up build times for larger F# projects. There’s also faster computation expression compilation and new FSI options for type-checking without execution.

My Take

This preview is less about flashy new features and more about infrastructure improvements that make everyday .NET development better. Runtime Async and CoreCLR on WebAssembly are the big architectural bets, while the library and SDK additions address real friction points.

For those of us in the .NET ecosystem, the Zstandard support, EF Core inheritance fixes, and SDK quality-of-life improvements are the kind of things that reduce the number of workarounds in production code. That’s always welcome.

You can try it out today by downloading .NET 11 Preview 1 or updating your global.json. Just don’t deploy it to production yet.