Start here. This is the direct spoken answer to practice first.
Why this question matters
Blocking on asynchronous work defeats thread release and can starve an ASP.NET Core service under load. Classic synchronization-context deadlocks are only one failure mode; request-thread exhaustion and delayed continuations are the common server-side symptoms.
Calling .Result or .Wait() blocks the current thread until the Task finishes. In a web service, enough blocked requests can exhaust available workers and delay the continuations needed to complete other requests. The usual fix is to make the call chain asynchronous from the controller through its dependencies and await the operation. I also verify that the underlying dependency offers real asynchronous I/O rather than hiding blocking work behind a Task-shaped API.