C# Task中延时执行方法Task.Delay

2021-11-17  乐帮网

c#


在异步函数中我们可以使用Task.Delay来达到延时的目的,以前的普遍认知是通过Thread.Sleep来实现。先来一个简单的示例:

// See https://aka.ms/new-console-template for more information

var task = Task.Factory.StartNew(() =>
{
    Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " =M1=======Begin===lebang2020.cn");
    for (int i = 0; i < 30; i++)
    {
        Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " ===Delay=== " + i);
    }
    Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " =M1=====End========lebang2020.cn");
});

await task;
var task2 = Task.Factory.StartNew(async() =>
{
    Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " =M2=======Begin===lebang2020.cn");
    for (int i = 0; i < 30; i++)
    {
        Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " ===Delay=== " + i);
        await Task.Delay(100);
    }
    Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " =M2=====End========lebang2020.cn");
});

//await task2;

Console.ReadLine();

输出为:

2021-11-17 23:21:56.689 =M1=======Begin===lebang2020.cn
2021-11-17 23:21:56.734 ===Delay=== 0
2021-11-17 23:21:56.734 ===Delay=== 1
2021-11-17 23:21:56.735 ===Delay=== 2
2021-11-17 23:21:56.735 ===Delay=== 3
2021-11-17 23:21:56.735 ===Delay=== 4
2021-11-17 23:21:56.735 ===Delay=== 5
2021-11-17 23:21:56.735 ===Delay=== 6
2021-11-17 23:21:56.735 ===Delay=== 7
2021-11-17 23:21:56.735 ===Delay=== 8
2021-11-17 23:21:56.735 ===Delay=== 9
2021-11-17 23:21:56.735 ===Delay=== 10
2021-11-17 23:21:56.735 ===Delay=== 11
2021-11-17 23:21:56.735 ===Delay=== 12
2021-11-17 23:21:56.735 ===Delay=== 13
2021-11-17 23:21:56.735 ===Delay=== 14
2021-11-17 23:21:56.735 ===Delay=== 15
2021-11-17 23:21:56.735 ===Delay=== 16
2021-11-17 23:21:56.735 ===Delay=== 17
2021-11-17 23:21:56.735 ===Delay=== 18
2021-11-17 23:21:56.735 ===Delay=== 19
2021-11-17 23:21:56.735 ===Delay=== 20
2021-11-17 23:21:56.735 ===Delay=== 21
2021-11-17 23:21:56.735 ===Delay=== 22
2021-11-17 23:21:56.735 ===Delay=== 23
2021-11-17 23:21:56.735 ===Delay=== 24
2021-11-17 23:21:56.735 ===Delay=== 25
2021-11-17 23:21:56.735 ===Delay=== 26
2021-11-17 23:21:56.735 ===Delay=== 27
2021-11-17 23:21:56.735 ===Delay=== 28
2021-11-17 23:21:56.735 ===Delay=== 29
2021-11-17 23:21:56.736 =M1=====End========lebang2020.cn
2021-11-17 23:21:56.740 =M2=======Begin===lebang2020.cn
2021-11-17 23:21:56.741 ===Delay=== 0
2021-11-17 23:21:56.859 ===Delay=== 1
2021-11-17 23:21:56.976 ===Delay=== 2
2021-11-17 23:21:57.081 ===Delay=== 3
2021-11-17 23:21:57.191 ===Delay=== 4
2021-11-17 23:21:57.301 ===Delay=== 5
2021-11-17 23:21:57.412 ===Delay=== 6
2021-11-17 23:21:57.526 ===Delay=== 7
2021-11-17 23:21:57.653 ===Delay=== 8
2021-11-17 23:21:57.776 ===Delay=== 9
2021-11-17 23:21:57.884 ===Delay=== 10
2021-11-17 23:21:57.991 ===Delay=== 11
2021-11-17 23:21:58.097 ===Delay=== 12
2021-11-17 23:21:58.204 ===Delay=== 13
2021-11-17 23:21:58.313 ===Delay=== 14
2021-11-17 23:21:58.426 ===Delay=== 15
2021-11-17 23:21:58.537 ===Delay=== 16
2021-11-17 23:21:58.644 ===Delay=== 17
2021-11-17 23:21:58.753 ===Delay=== 18
2021-11-17 23:21:58.861 ===Delay=== 19
2021-11-17 23:21:58.969 ===Delay=== 20
2021-11-17 23:21:59.079 ===Delay=== 21
2021-11-17 23:21:59.187 ===Delay=== 22
2021-11-17 23:21:59.296 ===Delay=== 23
2021-11-17 23:21:59.418 ===Delay=== 24
2021-11-17 23:21:59.527 ===Delay=== 25
2021-11-17 23:21:59.638 ===Delay=== 26
2021-11-17 23:21:59.749 ===Delay=== 27
2021-11-17 23:21:59.860 ===Delay=== 28
2021-11-17 23:21:59.966 ===Delay=== 29
2021-11-17 23:22:00.090 =M2=====End========lebang2020.cn

它和Thread.Sleep的区别在于, await Task.Delay(100); 是专门为异步延时设计的。

公众号二维码

关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com

庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。

欧阳修

付款二维码

如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力