.NET Core中如何实现类似TypeScript的异步延迟等待?
.NET Core 中实现 TypeScript 非阻塞延迟的正确方式
你提到的TypeScript代码:
await new Promise((resolve) => setTimeout(resolve, 10000));
本质是非阻塞式延迟——await会释放当前线程,让它可以去处理其他任务,10秒后再回到这段逻辑继续执行。
为什么Thread.Sleep(10000)效果不同?
System.Threading.Thread.Sleep(10000)是阻塞式睡眠:它会直接让当前线程挂起10秒,这段时间线程完全被占用,什么都做不了,和TS代码的非阻塞逻辑完全不是一回事,所以效果自然不一样。
await Task.Delay(10000)是不是更好的方案?
是的,这就是对应TS代码的正确实现,两者工作逻辑完全一致:
- 调用
Task.Delay(10000)时,会注册一个系统定时器,然后立刻返回一个未完成的Task对象 await关键字会释放当前线程,让线程回到线程池去处理其他请求或任务- 10秒后定时器触发,
Task变为完成状态,后续逻辑会在线程池的可用线程上继续执行
给你一个完整的示例代码:
using System; using System.Threading.Tasks; public class Program { public static async Task Main() { Console.WriteLine("开始非阻塞延迟"); await Task.Delay(10000); Console.WriteLine("延迟结束,继续执行后续代码"); } }
内容的提问来源于stack exchange,提问作者mbrc
相关产品推荐
相关产品推荐

