Task.Delay() 和 Thread.Sleep() 区别
前言
这篇已经做了一个总结,我来
https://www.cnblogs.com/yy1234/p/8073732.html
1、Thread.Sleep 是同步延迟,Task.Delay异步延迟。
2、Thread.Sleep 会阻塞线程,Task.Delay不会。
3、Thread.Sleep不能取消,Task.Delay可以。
4、Task.Delay() 比 Thread.Sleep() 消耗更多的资源,但是Task.Delay()可用于为方法返回Task类型;或者根据CancellationToken取消标记动态取消等待
5、Task.Delay() 实质创建一个运行给定时间的任务, Thread.Sleep() 使当前线程休眠给定时间。
那么就用代码来验证一下吧。
正文
代码如下:
static void Main(string[] args)
{
var test = Test_Delay();
Thread.Sleep(TimeSpan.FromSeconds(2));
Stopwatch sw = new Stopwatch();
sw.Start();
test.Wait();
sw.Stop();
TimeSpan ts = sw.Elapsed;
Console.WriteLine(ts.TotalMilliseconds);
Console.ReadKey();
}
public static Task Test_Delay()
{
Task delay1 = Task.Delay(TimeSpan.FromSeconds(5));
return delay1;
}
结果是:
上面显示大概监听为3秒。这个表示了当前主线程在运行的时候,Task.Delay也在运行,这个只有在不同线程才可以实现。
然后呢,不同线程自然不会堵塞。
关于开销的问题,那么用vs 左边的性能测试测试一下。以前测过,代码丢了。思路就是让他们共同执行1000次,看下性能曲线。
因为Task.Delay 多开一个线程所以消耗更多,然而实际使用中一般用Task.Delay,因为高并发不希望线程堵塞,而且Task.Delay 可以取消。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?