在 .NET 中,async/await 默认会捕获当前同步上下文(如 ASP.NET、WinForms、WPF),并在异步完成后尝试回到原线程继续执行。如果在同步方法中使用 Task.Result 或 Task.Wait 阻塞当前线程,而异步方法又在等待回到这个线程执行,就会形成互相等待,从而产生死锁。