LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

延迟等待的艺术:C#中Task.Delay与Thread.Sleep的对比与实战

admin
2024年1月10日 10:48 本文热度 875

概述:在C#中,`Task.Delay`和`Thread.Sleep`都用于引入延迟,但`Task.Delay`适用于异步环境,不阻塞线程;而`Thread.Sleep`适用于同步环境,直接阻塞当前线程。实例源代码清晰演示了两者的用法和场景选择,帮助开发者根据需求做出明智的选择。

在C#中,Task.Delay 和 Thread.Sleep 都用于在代码中引入延迟,但它们的使用场景和效果略有不同。

1. Task.Delay

Task.Delay 是异步等待的一部分,用于在异步代码中引入延迟,而不会阻塞线程。

async Task SomeAsyncMethod()

{

    Console.WriteLine("Start");

    await Task.Delay(1000); // 等待1秒,不会阻塞线程

    Console.WriteLine("End");

}

2. Thread.Sleep

Thread.Sleep 是同步方法,会直接导致当前线程阻塞。

void SomeMethod()

{

    Console.WriteLine("Start");

    Thread.Sleep(1000); // 阻塞线程1秒

    Console.WriteLine("End");

}

3. 使用场景对比

  • 使用 Task.Delay 适合异步环境,例如在异步方法中实现延迟。

  • 使用 Thread.Sleep 适合在同步环境下,如控制台应用程序或单线程应用中引入延迟。

4. 实例源代码

4.1 使用 Task.Delay

using System;

using System.Threading.Tasks;


class Program

{

    static async Task Main()

    {

        Console.WriteLine("Start");

        await SomeAsyncMethod();

        Console.WriteLine("End");

    }


    static async Task SomeAsyncMethod()

    {

        await Task.Delay(1000); // 异步等待1秒,不会阻塞线程

    }

}

4.2 使用 Thread.Sleep

using System;

using System.Threading;


class Program

{

    static void Main()

    {

        Console.WriteLine("Start");

        SomeMethod();

        Console.WriteLine("End");

    }


    static void SomeMethod()

    {

        Thread.Sleep(1000); // 同步阻塞线程1秒

    }

}

以上实例展示了在异步和同步环境中使用 Task.Delay 和 Thread.Sleep 的不同方式。选择使用哪一个取决于你的代码执行上下文和需求。


该文章在 2024/1/10 10:48:29 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved