小程序原生组件—提升你的小程序体验
1034
2022-08-03
c语言异步编程async、await与Task(Async/Await 如何通过同步的方式实现异步)
如何使用C语言进行异步编程?接下来带你了解如何使用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.
Task.Run表示是创建并运行一个一个子线程。
使用代码调用DoMethod1这个异步方法代码说明:
(1)主线程阴塞了10秒
(2) DoMethod1使用Task创建了一个线程,并使用Thread.Sleept模拟子线程执行了(阻塞)20毫秒,使之执行的时间大于主线程的执行时间。
(2) 使用async修改的DoMethod1有一个输出序号3,在Task.Run后面 紧跟输出了 序号4
输出结果:
这个输出结果表明了,在未使用await的情况下 子线程会慢于这个方法下的主进程的输出之后。
或者主进程只管执行自己的,分配了一个任务给子线程,随便它什么时候执行完,这里使用Sleep(20)的意思是让他慢于Task.Run后面的输出
使用await与async配对来修饰符代码
输出结果:
注:
在async修饰的方法内部,如果使用await修饰于Task(或者说是线程)的执行,它会等待子线程执行完成后 再执行其他逻辑
而async整体方法,也会在异步于主进程的。就是说在async修饰的方法DoMethod1,对于DoTest来说他不管DoMethod1有没有执行完,他只管进行他的进程。
从上图看出来,DoTest的序号5 在线程执行完成前先执行完成了。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~