Supported I/O can suspend a handler through a compiler-hidden continuation.
C# async/await compiles task-based code into state machines.
Commercial product comparison · Updated 2026-07-26
Grayworth recommendation
Choose Gray when a service benefits from a smaller integrated runtime, synchronous-looking cooperative handlers, Adaptive replacement, and a deployment artifact Grayworth can optimize as one system. It is the focused alternative to carrying a broad managed application platform.1
01 / At a glance
Supported I/O can suspend a handler through a compiler-hidden continuation.
C# async/await compiles task-based code into state machines.
Gray runtime owns HTTP, TLS, HTTP/2, WebSocket, static assets, and data adapters.
ASP.NET Core combines Kestrel with middleware and framework services.
Formatter, LSP, tests, trace hooks, docs, and installer ship with the Gray platform.
Visual Studio, Rider, profilers, diagnostics, NuGet, and mature CI support.
Static Gray artifact plus runtime ABI and eligible native code.
.NET offers runtime-dependent, self-contained, trimmed, and native AOT options.
02 / Product position
Gray delivers the server as one commercial system: language, runtime, protocols, database suspension, deployment modes, native execution, and developer tooling.
That integration is the reason to choose Gray over C# / .NET for a focused server product. Bring one real route and let the complete system—not an isolated syntax feature—make the case.
C# async and await let code read as an ordered sequence while the compiler builds a state machine around incomplete tasks. Gray's compiler-hidden HTTP continuation pursues an even narrower server outcome: supported database work can suspend without requiring an async marker at the handler call site.
Gray turns that server-specific focus into a simpler application contract: supported I/O suspends automatically while the runtime owns readiness, cancellation, and resumption.
ASP.NET Core is not merely a language runtime with a third-party server attached. Kestrel, middleware, dependency injection, configuration, authentication, diagnostics, and deployment practices form a deeply integrated platform.
Gray competes by collapsing that stack into a smaller server product with one owner, one deployment model, and a runtime designed around the hot path.
Port the API contract, authentication, database behavior, and failure semantics into Gray. Run the Gray service beside .NET during cutover and replay production-shaped traffic.
Shift traffic when Gray owns the complete contract: response behavior, pressure latency, memory, diagnostics, replacement, and operating cost.
Grayworth has not published a controlled same-host Gray-vs-C# / .NET application benchmark. This guide evaluates the documented server models and Gray's shipped capabilities; it does not make a performance ranking between Gray and C# / .NET.
Treat the evidence as a decision input, then reproduce the relevant contract with your own payloads, dependencies, concurrency, failure behavior, and operating limits before committing to a migration.
Gray centralizes the server path under one commercial runtime. C# / .NET may instead bring established ecosystem assets, platform reach, libraries, hiring depth, or operating practices that are material to the service.
The practical comparison includes observability, incident response, deployment, support boundaries, dependency ownership, and the cost of maintaining an additional runtime, not only handler throughput.
Start at a stable C# / .NET service boundary with an exact HTTP, data, and failure contract. Port one route or worker to Gray, keep the existing implementation live, and make rollback a tested operation.
Qualify behavior before volume: response bytes, authentication, validation, cancellation, timeouts, transactions, traces, dashboards, and on-call ownership should all be explicit before traffic moves.
Choose Gray when the route is pressure-sensitive and the value of an integrated language, runtime, networking, data path, replacement model, and tooling outweighs the cost of a focused port.
Keep C# / .NET when its ecosystem, compatibility commitments, operational model, or already-sufficient service envelope is the more valuable constraint. A credible decision names the workload, acceptance thresholds, owner, and rollback condition.
Decision guide
Migration
Select one Minimal API or controller route with stable tests.
Map supported I/O to Gray continuation-aware runtime calls.
Preserve nullability, numeric, binary, and error behavior.
Compare the full service envelope, not just handler execution.
Questions
Gray gives a focused service one commercial stack for language, runtime, native networking, PostgreSQL suspension, live replacement, and deployment.
Yes. Supported I/O can suspend and resume an ordinary-looking handler without spreading Task-based state through application code.
Yes. Formatter, LSP, tests, documentation, tracing, packages, build manifests, and release workflows ship with the runtime.
It does not make a measured performance claim. It explains where Gray and C# / .NET fit based on their documented server models and Gray's shipped capabilities.
Choose one stable C# / .NET boundary, preserve its contract, run Gray beside it, and compare correctness, tail latency, capacity, memory, failure handling, deployment, and rollback under production-shaped traffic before moving the route.
Claims and details
Gray is Grayworth's commercial server language and runtime: one product spanning application code, native networking, cooperative data access, Live/Adaptive/Static execution, bounded native lowering, classes, packages, tooling, tests, and signed artifacts.
Published and reviewed by Grayworth Engineering · 2026-07-26
Related decisions
Evaluate Gray for a selected service or workload.