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

看起来 新起了个线程

相关推荐
用户83562907805136 分钟前
C# 高效生成 Word 表格:复杂表格创建实战指南
后端·c#
屠夫39 分钟前
C# LINQ
c#
光头闪亮亮3 小时前
电子发票解析工具-c#桌面应用开发-DataGridView表格控件使用详解
c#
周杰伦fans3 小时前
C# 中的 `Hashtable`
开发语言·c#
lingggggaaaa4 小时前
免杀对抗——C2远控篇&PowerShell&有无文件落地&C#参数调用&绕AMSI&ETW&去混淆特征
c语言·开发语言·笔记·学习·安全·microsoft·c#
咩图4 小时前
WPF+Prism8.0.0.1909+C#创建一个桌面程序
c#·wpf·prism
Charles_go5 小时前
C#中级45、什么是组合优于继承
开发语言·c#
我是唐青枫5 小时前
一文理解 C#.NET Tuples:从基础到高级应用
c#·.net
Charles_go6 小时前
C#中级46、什么是模拟
开发语言·oracle·c#
一只爱做笔记的码农6 小时前
【BootstrapBlazor】移植BootstrapBlazor VS工程到Vscode工程,报error blazor106的问题
笔记·学习·c#