陕西省建设厅申报网站,wordpress 设置分页显示条数,成都网站建设推,wordpress 3.8一、async、await用法的作用 async用法主要是用来作为修饰符将方法作为异步方法使用#xff0c;await关键字只用作为在异步方法才能使用#xff0c;也就是只有当方法有async修饰后#xff0c;才能在方法中使用await#xff0c;await后跟Task新的任务启动。#xff08;awai…一、async、await用法的作用 async用法主要是用来作为修饰符将方法作为异步方法使用await关键字只用作为在异步方法才能使用也就是只有当方法有async修饰后才能在方法中使用awaitawait后跟Task新的任务启动。await和async是配对使用
二、async、await用法实例
第一个关键点
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace 线程test1005
{public delegate void test(string s1);class Program{static void Main(string[] args){test();for (int i 0; i 400; i){Console.Write(0);}Console.Read();}public async static void test(){for (int i 0; i 300; i){Console.Write(1);}await Task.Run(() {for (int i 0; i 300; i){Console.Write(2);}});for (int i 0; i 300; i){Console.Write(3);}}}
}await的核心作用如上述代码当中我们在test函数中使用Task.Run开启新线程后主线程和支线程交替执行也就是输出结果为1然后2和3交替输出最后输出0只是在函数内部开启支线程并没有跳出函数。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace 线程test1005
{public delegate void test(string s1);class Program{static void Main(string[] args){test();for (int i 0; i 1000; i){Console.Write(0);}Console.WriteLine(0的支线程号为 Thread.CurrentThread.ManagedThreadId);Console.Read();}public async static void test(){for (int i 0; i 300; i){Console.Write(1);}Console.WriteLine(1的支线程号为 Thread.CurrentThread.ManagedThreadId);Task.Run(() {for (int i 0; i 300; i){Console.Write(2);}Console.WriteLine(2的支线程号为 Thread.CurrentThread.ManagedThreadId);});for (int i 0; i 300; i){Console.Write(3); }Console.WriteLine(3的支线程号为 Thread.CurrentThread.ManagedThreadId);}}
}
运行结果为 在添加await后当输出2的时候会跳出test函数2和0交替输出等待Task.run运行完再继续执行函数后的内容输出结果也就是12和0交替输出,最后再输出3如果0的数量比较多则0和3也会交替输出
总结test中的代码在await以前的代码都是在主函数的线程中输出但是在await以后的代码会在Task.Run的线程中运行。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace 线程test1005
{public delegate void test(string s1);class Program{static void Main(string[] args){test();for (int i 0; i 1000; i){Console.Write(0);}Console.WriteLine(0的支线程号为 Thread.CurrentThread.ManagedThreadId);Console.Read();}public async static void test(){for (int i 0; i 300; i){Console.Write(1);}Console.WriteLine(1的支线程号为 Thread.CurrentThread.ManagedThreadId);await Task.Run(() {for (int i 0; i 300; i){Console.Write(2);}Console.WriteLine(2的支线程号为 Thread.CurrentThread.ManagedThreadId);});for (int i 0; i 300; i){Console.Write(3); }Console.WriteLine(3的支线程号为 Thread.CurrentThread.ManagedThreadId);}}
}运行结果如图 提示本人准备建立一个技术交流群会将日常学习工作中遇到的问题和解决方案进行分享同时也会将代码和学习资料上传进去有什么不懂的问题可以咨询我vSJS66-12
生活所迫打个广告本人也代购莆田鞋不是中间商工厂直接取货价格优惠质量保证都是我自己前去挑选可以视频选购验货希望大家支持赚点生活费vSJS66-12
第二个关键点
await会返回一个结果返回的结果类型是Taskresut类型当我们主函数需要该结果的result的时候我们的代码会等待函数全部完成后才会继续执行。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace 线程test1005
{public delegate void test(string s1);class Program{static void Main(string[] args){var tttest();for (int i 0; i 1000; i){Console.Write(0);}Console.WriteLine(0的支线程号为 Thread.CurrentThread.ManagedThreadId);Console.WriteLine(tt.Result);for (int i 0; i 1000; i){Console.Write(8);}Console.Read();}public async static Taskint test(){for (int i 0; i 300; i){Console.Write(1);}Console.WriteLine(1的支线程号为 Thread.CurrentThread.ManagedThreadId);var result await Taskint.Run(() {for (int i 0; i 300; i){Console.Write(2);}Console.WriteLine(2的支线程号为 Thread.CurrentThread.ManagedThreadId);return 10;});for (int i 0; i 300; i){Console.Write(3); }Console.WriteLine(3的支线程号为 Thread.CurrentThread.ManagedThreadId);return result;}}
}
上述代码中当主函数中需要tt.result时主函数代码会等待test函数运行完返回result结果后再继续执行后续代码。
运行结果为 提示async修饰的函数类型只有三种void类型、Task和TaskT
Task.Run的单独返回类型为内部运行函数的返回值T但await修饰后的返回值为TaskT
参考文献
C# async / await 用法_c# await_熊思宇的博客-CSDN博客