潍坊网站制作保定公司,网站如何做一张轮播图,企业网站开发制作,梅州住房和城乡建设部网站文章目录 1. 异步编程介绍1.1 简单介绍1.2 async/await 使用1.3 Task/TaskTResult 对象 2. 样例2.1 迅速启动所有任务#xff0c;仅当需要结果才等待任务执行2.2 使用 await 调用异步方法#xff0c;即使这个异步方法内有 await 也不会同时执行回调和向下执行操作(必… 文章目录 1. 异步编程介绍1.1 简单介绍1.2 async/await 使用1.3 Task/TaskTResult 对象 2. 样例2.1 迅速启动所有任务仅当需要结果才等待任务执行2.2 使用 await 调用异步方法即使这个异步方法内有 await 也不会同时执行回调和向下执行操作(必须完成外层await 所规定的方法) 3. 补充拓展说明3.1 Task关键字 1. 异步编程介绍
1.1 简单介绍 异步编程官方参考文档异步编程 1.2 async/await 使用 细节注意 async 用来修饰方法表示这个方法可以成为一个异步方法但是如果内部没有搭配使用 await 关键字的话其作用还是等效于一个同步方法await 关键字必须用于在 async 修饰的异步方法内使用await 的作用就是立即返回调用方法的结果外部调用该 async 方法的地方将不会等待这个 await 关键字修饰 方法/其他延时 操作的完成。但这个async 异步方法内下面的操作还是必须要等待这个 await 关键字修饰 方法/其他延时 操作的完成. class Program {static void Main(string[] args) {Console.WriteLine(This is methof(Main) starting ...);Test();Console.WriteLine(This is methof(Main) ending ...);Console.ReadLine();}static async void Test() {Console.WriteLine(This is methof(Test) starting ...);// 立即返回Test函数运行结果继续Main函数运行. 并且同时将会进行延时操作后再继续下面的方法.await Task.Delay(3000); Console.WriteLine(This is methof(Test) ending ...);}}
/*
This is methof(Main) starting ...
This is methof(Test) starting ...
// await Task.Delay(3000); 返回主线程运行 当前Test()方法此位置暂停运行3s
This is methof(Main) ending ...
This is methof(Test) ending ...
*/1.3 Task/Task 对象 简单说明 使用Task或Task对象来保存正在运行的任务, 可以使用这个对象来保存一个正在运行的任务. class Program {static void Main(string[] args) {Taskint task Task.Run(() {Console.WriteLine(Hello world ..);return 2024;});int sum task.Result;Console.WriteLine(sum);}
}
/*
Hello world ..
2024
*/2. 样例
2.1 迅速启动所有任务仅当需要结果才等待任务执行 假设我们需要完成打游戏 5s我们也需要完成听歌曲 5s最后我们需要去洗个澡 3s. 我们想要异步完成打游戏和听歌曲的操作但是洗澡必须先完成打游戏和听歌曲两个步骤. 您可以立即启动所有异步任务。仅当您需要结果时才等待每个任务借助 await 关键字await 关键字将会阻塞异步操作的执行必须等待所有前缀步骤完成后再完成接下来的步骤
class Program {static void Main(string[] args) {Test();Console.WriteLine(This is Main Finish .....);Console.ReadLine();}static async void Test() {Task t1 playGameAsync();Task t2 listenMusicAsync();await t1;await t2; // await 关键字表示必须等待这两个方法完成才能继续接下来的洗澡操作Console.WriteLine(i am washing right now ...);}static async Task playGameAsync() {await Task.Run(() {Console.WriteLine(I am play game ..);Task.Delay(5000).Wait();});Console.WriteLine(i am finish play game);}static async Task listenMusicAsync() {await Task.Run(() {Console.WriteLine(I am listen music ..);Task.Delay(5000).Wait();});Console.WriteLine(i am finish listen music);}
}
/*
I am play game ..
I am listen music ..
This is Main Finish ..... // 这个地方的原因
(这个地方将会明显等待 5s, 洗澡操作必须等待听音乐和游戏操作先完成)
i am finish play game
i am finish listen music
i am washing right now ...
*/ 2.2 使用 await 调用异步方法即使这个异步方法内有 await 也不会同时执行回调和向下执行操作(必须完成外层await 所规定的方法)
class Program {static void Main(string[] args) {Test(); // 同步方法调用异步方法碰到了异步方法内的 await( await playGameAsync() ) 就会回调执行Console.WriteLine(This is Main Finish .....);Console.ReadLine();}static async void Test() {await playGameAsync(); // 这里不会因为 playGameAsync() 方法内有await就回调执行 必须等待异步方法playGameAsync()执行完全.Console.WriteLine();Console.WriteLine(i am washing right now ...);}static async Task playGameAsync() {await Task.Run(() {Task.Delay(3000).Wait();Console.WriteLine(I am play game ..);});Task.Delay(3000).Wait();Console.WriteLine(i am finish play game);}}
/*
This is Main Finish .....(等待3s)
I am play game ..
i am finish play game (明显发现 finish play game 的输出顺序会优先于 )i am washing right now ...
*/ 3. 补充拓展说明
3.1 Task关键字