C#学习笔记-Task.Delay和Thread.Sleep的区别

当我们在代码中的调用await Task.Delay(x),我们并不是在指示程序"此处暂停x毫秒",而是在说:"我已经完成了我能做的所有工作,你可以去运行其他任务了,x毫秒后请唤醒我继续我的工作"。这样看起来,Task.Delay并不像是一个暂停指令,而更像是一个让时间调度器知道当前任务可以被暂时挂起,而去运行其他任务的信号。

下面这个例子或许可以更明确地展示Task.Delay和Thread.Sleep的区别:

csharp 复制代码
using System;
using System.Threading;
using System.Threading.Tasks;
using ConsoleApp1;

public class Example
{
    public static void Main()
    {
        Log.Debug("主线程开始运行...");
        WorkWithDelay();
        for (int i = 0; i < 5; i++)
        {
            Thread.Sleep(1000);
            Log.Debug("主线程在做其他任务...");
        }
        Log.Debug("主线程结束运行...");
    }

    //一个使用了Task.Delay的任务
    public static async void WorkWithDelay()
    {
        Log.Debug("这个任务开始运行...");
        for (int i = 0; i < 5; i++)
        {
            //TODO:BOIL 这里测试 Task.Delay 和 Thread.Sleep差别
            await Task.Delay(1000);  
            Thread.Sleep(1000);
          
            Log.Debug("这个任务在做任务...");
        }
        Log.Debug("这个任务结束运行...");
    }
}

1、 当调用Thread.Sleep时候

Thread.Sleep(1000);

2、 当调用Task.Delay 时候

await Task.Delay(1000);

看起来 新起了个线程

相关推荐
小码编匠1 天前
WPF 中的高级交互通过右键拖动实现图像灵活缩放
后端·c#·.net
唐青枫1 天前
C#.NET 定时任务与队列利器:Hangfire 完整教程
c#·.net
hez20102 天前
Runtime Async - 步入高性能异步时代
c#·.net·.net core·clr
mudtools2 天前
.NET驾驭Word之力:玩转文本与格式
c#·.net
唐青枫2 天前
C#.NET 数据库开发提速秘籍:SqlSugar 实战详解
c#·.net
mudtools3 天前
.NET驾驭Word之力:理解Word对象模型核心 (Application, Document, Range)
c#·.net
大飞pkz3 天前
【设计模式】C#反射实现抽象工厂模式
设计模式·c#·抽象工厂模式·c#反射·c#反射实现抽象工厂模式
唐青枫3 天前
从入门到进阶:C#.NET Stopwatch 计时与性能测量全攻略
c#·.net
未来之窗软件服务4 天前
幽冥大陆(二)RDIFSDK 接口文档:布草洗涤厂高效运营的技术桥梁C#—东方仙盟
开发语言·c#·rdif·仙盟创梦ide·东方仙盟
1uther4 天前
Unity核心概念⑨:Screen
开发语言·游戏·unity·c#·游戏引擎