Start here
Start with a problem you need to solve. These guides explain the fix, show the code, and cover the edge cases, with selected language and tooling articles for further reading.
20 posts · grouped by topic
Practical debugging
Read a live log safely, configure Serilog without duplicate errors, and handle Windows session events.
- How to tail a log file in C# while another process is still writing to it Open the log with FileShare.ReadWrite | FileShare.Delete, seek to the end, poll for new bytes, decode them with your own UTF-8 Decoder instead of StreamReader, and handle truncation and rotation explicitly. A tested tail -F implementation for .NET 10 and .NET 11.
- How to use a different Serilog output template per log level from appsettings.json outputTemplate is fixed per sink, so per-level formatting needs either an ExpressionTemplate with {#if @l ...} blocks or two Logger sub-loggers with ByIncludingOnly / ByExcluding filters. Both configured purely from appsettings.json, tested on Serilog 4.4, Serilog.Settings.Configuration 10.0.1 and Serilog.Expressions 5.0.
- How to detect Windows session lock, unlock, logon and logoff events in a C# app Use SystemEvents.SessionSwitch in a desktop or console app, override OnSessionChange in a Windows service, or hook WM_WTSSESSION_CHANGE yourself. Covers .NET 10 code for all three, the hidden '.NET System Events' thread, why services see logon but desktop apps do not, out-of-order notifications, and how to query the current lock state with WTSQuerySessionInformation.
Runnable examples
Download small projects for process waits, JSON serialization, and a React Native two-column layout. Each includes run instructions and verification details.
- C# How to wait for a process to end? Wait for a child process in C# with WaitForExit or WaitForExitAsync. Run a complete example covering exit codes, timeouts, cancellation, and cleanup on .NET 8 and 10.
- System.Text.Json – Disable reflection-based serialization Disable System.Text.Json reflection defaults, diagnose InvalidOperationException, and serialize with a source-generated context in a runnable .NET 8 example.
- .NET 8 – Mark JsonSerializerOptions as readonly Freeze JsonSerializerOptions with MakeReadOnly, fix the missing TypeInfoResolver error, and create a mutable copy in a runnable .NET 8 example.
- How to create a 2 column Flexbox layout in React Native A runnable Expo example of a wrapped two-column React Native layout using numeric dimensions and spacing, without CSS px strings or calc().
C# language
What actually changed in the language and how it lands in real code.
- C# 14 Extension Members: Extension Properties, Operators, and Static Extensions C# 14 introduces extension members, allowing you to add extension properties, operators, and static members to existing types using the new extension keyword.
- C# 14 Null-Conditional Assignment: Using ?. and ?[] on the Left Side C# 14 extends null-conditional operators to work on the left-hand side of assignments, eliminating verbose null checks when setting properties or indexers.
- C# 15 Union Types Are Here: Type Unions Ship in .NET 11 Preview 2 C# 15 introduces the union keyword for type unions with exhaustive pattern matching and implicit conversions. Available now in .NET 11 Preview 2.
EF Core
Core data-access features I've dug into in EF Core 10 and 11.
- EF Core 11 Adds Native SQL Server Vector Search with DiskANN Indexes EF Core 11 Preview 2 supports SQL Server 2025 VECTOR_SEARCH() and DiskANN vector indexes directly from LINQ. Here is how to set up the index, run approximate queries, and what changes from the EF Core 10 VectorDistance approach.
- EF Core 11 Prunes Unnecessary Reference Joins in Split Queries EF Core 11 Preview 3 removes redundant to-one joins from split queries and drops unneeded ORDER BY keys. One reported scenario got 29% faster, another 22%. Here is what the SQL now looks like.
- EF Core 11 turns on Cosmos DB transactional batches by default EF Core 11 groups Cosmos DB writes into transactional batches per container and partition on every SaveChanges, giving best-effort atomicity and fewer roundtrips without any code changes.
Performance and profiling
Posts that show the moving parts, not just the feature flags.
- .NET 10 Performance: SearchValues Use SearchValues in .NET 10 for high-performance multi-string searching. Replaces foreach loops with SIMD-accelerated matching using Aho-Corasick and Teddy algorithms.
- Perfetto + dotnet-trace: a practical profiling loop for .NET 9/.NET 10 A practical profiling loop for .NET 9 and .NET 10: capture traces with dotnet-trace, visualize them in Perfetto, and iterate on CPU, GC, and thread pool issues.
.NET runtime and tooling
Things that change how day-to-day .NET work feels.
- .NET 11 Runtime Async Replaces State Machines with Cleaner Stack Traces Runtime Async in .NET 11 moves async/await handling from compiler-generated state machines into the runtime itself, producing readable stack traces, correct breakpoints, and fewer heap allocations.
- ASP.NET Core 11 Ships Native OpenTelemetry Tracing: Drop the Extra NuGet Package ASP.NET Core in .NET 11 Preview 2 adds OpenTelemetry semantic attributes directly to HTTP server activity, removing the need for OpenTelemetry.Instrumentation.AspNetCore.
MAUI and Flutter
Mobile-side posts with enough detail to be actionable.
- .NET MAUI 11 Ships a Built-in LongPressGestureRecognizer .NET MAUI 11 Preview 3 adds LongPressGestureRecognizer as a first-party gesture, with duration, movement threshold, state events, and command binding, replacing the common Community Toolkit behavior.
- Pin Clustering Lands in .NET MAUI 11 Maps .NET MAUI 11 Preview 3 adds built-in pin clustering to the Map control on Android and iOS, with ClusteringIdentifier groups and a ClusterClicked event.
- Flutter Text: the `leadingDistribution` detail that changes how your UI “breathes” The leadingDistribution property in Flutter's TextHeightBehavior controls how extra leading is distributed above and below glyphs. Here is when it matters and how to fix text that looks vertically off.