异步代码中不要用sleep.

本文介绍了在异步编程中为何应使用Task.Delay()而非Thread.Sleep()来实现延迟执行。Thread.Sleep()会阻塞主线程,降低系统并发能力,而Task.Delay()则不会。通过示例代码展示了如何正确使用Task.Delay()来提高程序效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在编写代码的时候,有时候我们需要“暂停一段时间,再继续执行代码”。比如调用一个Http接口,如果调用失败,则需要等待2秒钟再重试。

    在异步方法中,如果需要“暂停一段时间”,那么请使用Task.Delay(),而不是Thread.Sleep(),因为Thread.Sleep()会阻塞主线程,就达不到“使用异步提升系统并发能力”的目的了。

    如下代码是错误的:

public  async Task TestSleep()
{
       await System.IO.File.ReadAllTextAsync("d:/temp/words.txt");
       Console.WriteLine("first done");
       Thread.Sleep(2000);
       await System.IO.File.ReadAllTextAsync("d:/temp/words.txt");
       Console.WriteLine("second done");
       return Content("xxxxxx");
} 

上面的代码是能够正确的编译执行的,但是会大大降低系统的并发处理能力。因此要用Task.Delay()代替Thread.Sleep()。如下是正确的:

public  async Task TestSleep()
{
       await System.IO.File.ReadAllTextAsync("d:/temp/words.txt");
       Console.WriteLine("first done");
       await Task.Delay(2000);//!!!
       await System.IO.File.ReadAllTextAsync("d:/temp/words.txt");
       Console.WriteLine("second done");
       return Content("xxxxxx");
}

作者:杨中科 https://www.bilibili.com/read/cv10566638 出处:bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值