c#夯实基础-异步编程async、await与Task

c#夯实基础-异步编程async、await与Task概述c#使用async修饰符来定义一个异步方法实现异步编程异步方法是异步方法中存在开启一个子线程来异步执行某个过程,这里使用Task来代替。

大家好,欢迎来到IT知识分享网。

概述

c#使用async修饰符来定义一个异步方法实现异步编程

异步方法是异步方法中存在开启一个子线程来异步执行某个过程,这里使用Task来代替。

async:英文的含义是异步的意思

await:期待或者等待的意思,这里理解成等待

aysnc修饰的方法意思是在方法内部创建子线程

定义使用async不用await,代码:

 public static void DoTest() { Console.WriteLine("序号1:主进程执行"); //执行函数 DoMehotd1(); //主进程停止运行10毫秒 Thread.Sleep(10); Console.WriteLine("序号5:主进程执行结束"); } /* * 使用Asnc 定义一个异步方法 * 在异步方法中,使用Task.Run运行一个线程 */ public static async void DoMehotd1() { Console.WriteLine("序号2:aysnc 方法 1"); Task.Run(() => { //子线程停止运行20毫秒 Thread.Sleep(20); Console.WriteLine("序号3:子线程执行"); }); Console.WriteLine("序号4:子线程执行"); }

注:如果使用了async,但是在async中的方法中未使用await进行配对使用,方法没有错,但是有警告,提示你使用await.

c#夯实基础-异步编程async、await与Task

Task.Run表示是创建并运行一个一个子线程。

使用代码调用DoMethod1这个异步方法代码说明:

(1)主线程阴塞了10秒

(2) DoMethod1使用Task创建了一个线程,并使用Thread.Sleept模拟子线程执行了(阻塞)20毫秒,使之执行的时间大于主线程的执行时间。

(2) 使用async修改的DoMethod1有一个输出序号3,在Task.Run后面 紧跟输出了 序号4

输出结果:

c#夯实基础-异步编程async、await与Task

这个输出结果表明了,在未使用await的情况下 子线程会慢于这个方法下的主进程的输出之后。

或者主进程只管执行自己的,分配了一个任务给子线程,随便它什么时候执行完,这里使用Sleep(20)的意思是让他慢于Task.Run后面的输出

使用await与async配对来修饰符代码

c#夯实基础-异步编程async、await与Task

使用async与await配合执行

输出结果:

c#夯实基础-异步编程async、await与Task

使用await与async 执行结果

注:

在async修饰的方法内部,如果使用await修饰于Task(或者说是线程)的执行,它会等待子线程执行完成后 再执行其他逻辑

而async整体方法,也会在异步于主进程的。就是说在async修饰的方法DoMethod1,对于DoTest来说他不管DoMethod1有没有执行完,他只管进行他的进程。

从上图看出来,DoTest的序号5 在线程执行完成前先执行完成了。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/56789.html

(0)
上一篇 2024-07-09 10:45
下一篇 2024-07-19 10:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信