dotnet watch run is the loop PHP developers expect

A compiled language usually means an explicit build step between editing and seeing the result, which is the thing that feels slowest coming from PHP. The file watcher removes it.

dotnet watch run

# watching for file changes...
# /src/Controllers/OrdersController.cs changed — restarting
# Now listening on: http://localhost:5000

It rebuilds and restarts on save, so the loop is an edit and a refresh — a second or two rather than instant, which is the honest difference. What it does not give is state surviving the restart, so an in-memory cache or a session held in the process is lost on every edit. That is a useful pressure toward keeping state outside the process, which is where it belonged anyway.