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

看起来 新起了个线程

相关推荐
张人玉14 小时前
C#通讯(上位机)常用知识点
开发语言·c#·通讯·上位机开发
武藤一雄16 小时前
C#:nameof 运算符全指南
开发语言·microsoft·c#·.net·.netcore
CSharp精选营18 小时前
聊一聊 C# 中的闭包陷阱:foreach 循环的坑你还记得吗?
c#·foreach·循环·for循环
月巴月巴白勺合鸟月半18 小时前
FHIR 的使用
人工智能·c#·fhir
公子小六19 小时前
基于.NET的Windows窗体编程之WinForms控件简介
windows·microsoft·c#·.net
观无20 小时前
mysql5.7下载地址
c#
武藤一雄20 小时前
C# 核心技术解析:Parse vs TryParse 实战指南
开发语言·windows·microsoft·微软·c#·.netcore
代数狂人20 小时前
在Godot中应用面向对象原则:C#脚本实践
c#·游戏引擎·godot
斌味代码21 小时前
RAG 实战:用 LangChain + DeepSeek 搭建企业私有知识库问答系统
开发语言·langchain·c#
张人玉1 天前
C#类常用知识总结Pro
服务器·c#