一.

1.Task.Delay实质是创建一个任务,再任务中开启一个定时间,然后延时指定的时间
2.Task.Delay不和await一起使用情况,当代码遇到Task.Delay一句时,创建了了一个新的任务去执行延时去了,当前代码继续往下执行
3.Task.Delay和await一起使用,当代码遇到await Task.Delay时候,当前线程要等该行代码执行完成后,再继续执行后面的代码

代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms; namespace _006__Task.Delay
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void btnDelayNoAwait_Click(object sender, EventArgs e)
{
Task task = Task.Factory.StartNew(() =>
{
Console.WriteLine($" Task.Delay开始:{DateTime.Now.ToString(" HH:mm:ss.fff")}");
for (int i = 0; i < 10; i++)
{
Console.WriteLine($" {DateTime.Now.ToString("HH:mm:ss.fff")} 正在进行:{i}");
Task.Delay(2000);
}
Console.WriteLine($" Task.Delay结束:{DateTime.Now.ToString("HH:mm:ss.fff")}");
Console.ReadKey();
}); } private void btnDelayHaveAwait_Click(object sender, EventArgs e)
{
Task task = Task.Factory.StartNew(async () =>
{
Console.WriteLine($" Task.Delay 有await 开始:{DateTime.Now.ToString("HH:mm:ss.fff")}");
for (int i = 0; i < 10; i++)
{
Console.WriteLine($" {DateTime.Now.ToString("HH:mm:ss.fff")} 有await正在进行:{i}");
await Task.Delay(2000);
}
Console.WriteLine($" Task.Delay 有await 结束:{DateTime.Now.ToString("HH:mm:ss.fff")}");
Console.ReadKey();
});
} private void btnThreadSleep_Click(object sender, EventArgs e)
{
Task task = Task.Factory.StartNew(() =>
{
Console.WriteLine($" Task.Delay 有await 开始:{DateTime.Now.ToString("HH:mm:ss.fff")}");
for (int i = 0; i < 10; i++)
{
Console.WriteLine($" {DateTime.Now.ToString("HH:mm:ss.fff")} 有await正在进行:{i}");
Thread.Sleep(2000);
}
Console.WriteLine($" Task.Delay 有await 结束:{DateTime.Now.ToString("HH:mm:ss.fff")}");
Console.ReadKey();
});
}
}
}

按钮【Task.Delay(不带await)】执行结果:

当程序遇到 Task.Delay(2000);时候,程序创建一个新的任务去执行延时2000了,当前任务继续向下执行,所以看起来并没有延时2秒的现象。

例如:你只有先写完作业,然后才能看电视。但是到写作业的时候,你让其他人帮你写(开启新的任务去执行延时),你继续去看电视(继续当前任务)。

按钮【Task.Delay(带await)】执行结果(推荐):

当程序遇到 await Task.Delay(2000);时候,当前任务,要等到新创建的任务执行完延时2000后,才继续后面的代码
例如:你只有先写完作业,然后才能看电视。但是到写作业的时候,你mother在旁边看着你,直到你写完作业(开启新的任务去执行延时),你才可以继续去看电视(继续当前任务)。

按钮【Thread.Sleep()】执行结果(不推荐):

Thread.Sleep 是让当前线程休眠指定的时间。在异步中是不推荐使用Thread.Sleep 的。

C#异步延迟Task.Delay的更多相关文章

  1. Task C# 多线程和异步模型 TPL模型 【C#】43. TPL基础——Task初步 22 C# 第十八章 TPL 并行编程 TPL 和传统 .NET 异步编程一 Task.Delay() 和 Thread.Sleep() 区别

    Task C# 多线程和异步模型 TPL模型   Task,异步,多线程简单总结 1,如何把一个异步封装为Task异步 Task.Factory.FromAsync 对老的一些异步模型封装为Task ...

  2. Task.Delay() 和 Thread.Sleep() 区别

    1.Thread.Sleep 是同步延迟,Task.Delay异步延迟. 2.Thread.Sleep 会阻塞线程,Task.Delay不会. 3.Thread.Sleep不能取消,Task.Dela ...

  3. Thread.Sleep(1000) 、Task.Delay(1000).Wait() 区别

    public static Task Delay(int millisecondsDelay, CancellationToken cancellationToken){    if (millise ...

  4. task.delay 和 thread.sleep

    1.Thread.Sleep 是同步延迟. Task.Delay异步延迟. 2.Thread.Sleep 会阻塞线程,Task.Delay不会. 3.Thread.Sleep不能取消,Task.Del ...

  5. Task.Delay方法的2个应用实例,单元测试等待,限时限次下载远程资源

    如果想让程序异步等待一段时间,可以考虑使用Task.Delay方法. 比如,在单元测试中模拟一个异步操作. static async Task<T> DelayedResult<T& ...

  6. 15.3 Task Task.Yield和Task.Delay说明

    https://blog.csdn.net/hurrycxd/article/details/79827958 书上看到一个Task.Yield例子,Task.Yield方法创建一个立即返回的awai ...

  7. Thread.Sleep vs. Task.Delay

    We use both Thread.Sleep() and Task.Delay() to suspend the execution of a program for some given tim ...

  8. .Net4.0如何实现.NET4.5中的Task.Run及Task.Delay方法

    前言 .NET4.0下是没有Task.Run及Task.Delay方法的,而.NET4.5已经实现,对于还在使用.NET4.0的同学来说,如何在.NET4.0下实现这两个方法呢? 在.NET4.0下, ...

  9. C# 异步编程Task整理(二)异常捕捉

    一.在任务并行库中,如果对任务运行Wait.WaitAny.WaitAll等方法,或者求Result属性,都能捕获到AggregateException异常. 可以将AggregateExceptio ...

随机推荐

  1. 腾讯tbs 内存泄露

    一.背景 TBS(腾讯浏览服务)是腾讯提供的移动端webview体验的整套解决方案(https://x5.tencent.com/docs/index.html),可以用于移动端加载doc.xls.p ...

  2. 开源框架 WebFirst 一键生成项目,在线建表

    1.WebFirst框架描述 WebFirst  是果糖大数据团队开发的新一代 高性能 代码生成器&数据库设计工具,由.net core 3.1 + sqlsugar 开发 导入1000个表只 ...

  3. selenium模块使用详解、打码平台使用、xpath使用、使用selenium爬取京东商品信息、scrapy框架介绍与安装

    今日内容概要 selenium的使用 打码平台使用 xpath使用 爬取京东商品信息 scrapy 介绍和安装 内容详细 1.selenium模块的使用 # 之前咱们学requests,可以发送htt ...

  4. zabbix 线路质量监控自定义python模块,集成ICMP/TCP/UDP探测,批量监控线路质量自定义阈值联动mtr保存线路故障日志并发送至noc邮箱

    互联网故障一般表现为丢包和时延增大,持续性故障不难排查,难的是间歇性或凌晨故障,后者往往来不及等我们测试就已经恢复正常,得不到异常时的mtr无法判断故障点在哪里 故此有了根据丢包率和时延变换联动mtr ...

  5. 796. Rotate String - LeetCode

    Question 796. Rotate String Solution 题目大意:两个字符串匹配 思路:Brute Force Java实现: public boolean rotateString ...

  6. Java获取特定区间随机数及产生不重复随机数

    问题 有这样一种需求,在这样一个数组中String[] arr = new String[]{"电商", "互联网", "小程序", &qu ...

  7. [codeforces] 暑期训练之打卡题(一)

    每个标题都做了题目原网址的超链接 Day1<Vanya and Lanterns> 题意: 一条长度为 l 的街道,在这条街道上放置了n个相同的灯,街道一端位置记为0,每个灯的位置在ai处 ...

  8. 安装Zookeeper到Linux

    系统版本:Ubuntu 16.04.5 LTS 软件版本:apache-zookeeper-3.5.8 硬件要求:无 1.安装依赖 Zookeeper需要JDK的支持. 注:需要先去JDK官网下载安装 ...

  9. 关于我学git这档子事

    创建本地分支并切换到该分支 git checkout -b *** 相当于如下2个命令: git branch *** git checkout *** 推送本地开发分支到远程开发分支 git pus ...

  10. coding++: java 操作FastDFS(上传 | 下载 | 删除)

    package cn.com.soundrecording.controller; import cn.com.soundrecording.utils.FastDFSClient;import co ...