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);

看起来 新起了个线程

相关推荐
西门啐血2 小时前
上位机开发之假装有设备,使用 C# 模拟串口设备
开发语言·mongodb·c#
丙氨酸長鏈3 小时前
[Bukkit插件开发]手持发射器箭矢机枪 教学文档 面向Python/C#开发者入门Java与Bukkit API
java·python·c#
淡海水3 小时前
12-01-YooAsset工程化-Unity资源管理规范
unity·c#·游戏引擎·yooasset
脚踏实地皮皮晨4 小时前
003003001_Grid控件
开发语言·windows·算法·c#·visual studio
caishenzhibiao5 小时前
降雨带波段点差 同花顺期货通指标
java·c语言·c#
半夢半醒15 小时前
[原创]《C#高级GDI+实战:从零开发一个流程图》第章:增加菱形、平行四边形、圆角矩形,文本居中显示
算法·c#·流程图
蓝斯4978 小时前
C# 调用邮箱应用发送带附件的邮件
网络·c#·github
BuHuaX9 小时前
U3D抖微小游戏开发流程 (一)
unity·c#·游戏引擎·游戏策划
脚踏实地皮皮晨9 小时前
003003002_WPF Grid 基类官方类定义逐行深度解析
开发语言·windows·算法·c#·wpf·visual studio