C# async/await使用举例
1、async/await几点总结
a、被async标记的方法,返回值类型只能为void、Task、Task<T>。
b、被async标记的方法,内部可以有await修饰符,表明内部逻辑某处有异步执行方法。
c、被async标记的方法,内部可以没有await修饰符,所有逻辑将同步执行。
d、task任务执行创建的线程为后台线程,主线如果不Task.result获取结果,主线程结束,异步任务未完成也结束。
f、await关键字:方法要被async修饰,才能在方法内部使用await,await后面必须是一个task或返回task的方法,标记了await,就说明后面的操作是一个异步操作。
2、应用实例
1 static void Main(string[] args)
2 {
3 Console.WriteLine("主线程开始");
4 Console.WriteLine("主线程ID:" + Thread.CurrentThread.ManagedThreadId);
5 var task = GetLengthAsync();
6 Console.WriteLine("主线程继续");
7 var timer = new Stopwatch();
8 timer.Start();
9 Console.WriteLine("task的返回值是" + task.Result);
10 timer.Stop();
11 Console.WriteLine("耗时:" + timer.Elapsed.TotalSeconds + "秒"); //显示时间
12 Console.WriteLine("主线程ID:" + Thread.CurrentThread.ManagedThreadId);
13 Console.WriteLine("主线程结束");
14 }
15
16 private static async Task<int> GetLengthAsync()
17 {
18 Console.WriteLine("GetLengthAsync()开始");
19 Console.WriteLine("GetLengthAsync()线程ID:" + Thread.CurrentThread.ManagedThreadId);
20 var str = await GetStringAsync();
21 Console.WriteLine("GetLengthAsync()线程ID:" + Thread.CurrentThread.ManagedThreadId);
22 Console.WriteLine("GetLengthAsync()执行完毕");
23 return str.Length;
24
25 }
26
27 private static Task<string> GetStringAsync()
28 {
29 Console.WriteLine("GetStringAsync()开始");
30 Console.WriteLine("GetStringAsync()线程ID:" + Thread.CurrentThread.ManagedThreadId);
31 Console.WriteLine("GetStringAsync()结束");
32 return Task.Run(() =>
33 {
34 Task.Delay(5000);
35 Console.WriteLine("异步任务开始执行");
36 Console.WriteLine("异步任务开始执行线程ID:" + Thread.CurrentThread.ManagedThreadId);
37 Console.WriteLine("异步任务耗时10s:");
38 Thread.Sleep(10000);
39 Console.WriteLine("异步任务执行完毕");
40 return "异步任务执行结果";
41 });
42
43 }
运行结果显示。

注释调9行结果显示。表明,主线程结束,异步任务未完成也结束。

部分内容参考:https://www.cnblogs.com/sheng-jie/p/6471986.html
C# async/await使用举例的更多相关文章
- async/await与promise(nodejs中的异步操作问题)
此文只是粗略介绍使用方法,欲了解核心概念请参考官方文档或其他资料. 举例写文章详情页面的时候的一个场景:首先更改文章详情中的 PV,然后读取文章详情,然后根据文章详情中文章 Id 查阅该文章评论和该文 ...
- [转] 以 async/await 为例,说明 babel 插件怎么搭
你一定碰到过这些库 babel-polyfill 项目地址:https://github.com/babel/babel/blob/master/packages/babel-polyfill 通过两 ...
- Promise及Async/Await
一.为什么有Async/Await? 我们都知道已经有了Promise的解决方案了,为什么还要ES7提出新的Async/Await标准呢? 答案其实也显而易见:Promise虽然跳出了异步嵌套的怪 ...
- 【学习笔记】深入理解async/await
参考资料:理解javaScript中的async/await,感谢原文作者的总结,本文在理解的基础上做了一点小小的修改,主要为了加深自己的知识点掌握 学完了Promise,我们知道可以用then链来解 ...
- 浅谈C#中的 async await 以及对线程相关知识的复习
C#5.0以后新增了一个语法糖,那就是异步方法async await,之前对线程,进程方面的知识有过较为深入的学习,大概知道这个概念,我的项目中实际用到C#异步编程的场景比较少,就算要用到一般也感觉T ...
- [转] 理解 JavaScript 的 async/await
[From] https://segmentfault.com/a/1190000007535316 边城 2016年11月19日发布 随着 Node 7 的发布,越来越多的人开始研究据说是 ...
- 深入理解理解 JavaScript 的 async/await
原文地址:https://segmentfault.com/a/1190000007535316,首先感谢原文作者对该知识的总结与分享.本文是在自己理解的基础上略作修改所写,主要为了加深对该知识点的理 ...
- 理解 JavaScript 的 async/await
随着 Node 7 的发布,越来越多的人开始研究据说是异步编程终级解决方案的 async/await.我第一次看到这组关键字并不是在 JavaScript 语言里,而是在 c# 5.0 的语法中.C# ...
- 异步Promise及Async/Await最完整入门攻略
一.为什么有Async/Await? 我们都知道已经有了Promise的解决方案了,为什么还要ES7提出新的Async/Await标准呢? 答案其实也显而易见:Promise虽然跳出了异步嵌套的怪圈, ...
- 异步Promise及Async/Await可能最完整入门攻略
此文只介绍Async/Await与Promise基础知识与实际用到注意的问题,将通过很多代码实例进行说明,两个实例代码是setDelay和setDelaySecond. tips:本文系原创转自我的博 ...
随机推荐
- Qt编写安防视频监控系统59-子模块3图文警情
一.前言 图文警情子模块是为了适应现在各种人脸识别报警应用而增加的,参照现在各种视频监控手机app报警提示信息,基本上都是带了时间.内容.图片缩略图(单击可以查看大图),这种信息排列形式在现代的软件中 ...
- Llama3.1 是怎么工作哒?原文翻译版😘
了解Llama3.1如何工作--深入探讨模型流程 原文标题:Understand How Llama3.1 Works - A Deep Dive Into the Model Flow 原作者:Xi ...
- IM跨平台技术学习(八):新QQ桌面版为何选择Electron作为跨端框架
本文由QQ技术团队王辉.吴浩.陈俊文分享,编辑Tina整理,本文收录时有内容修订和排版优化. 1.引言 在瞬息万变的互联网行业中,年过二十四的即时通讯IM应用 QQ 堪称超长寿的产品,见证了中国互联网 ...
- Coravel:一个可轻松实现任务调度、队列、邮件发送的开源项目
推荐一个轻量级的任务调度开源项目. 01 项目简介 Coravel是一个.NET开源任务调度库,只需简单代码.几乎零配置就可以实现多种功能柜,如任务调度.队列.缓存.事件广播和邮件发送等.该项目特点就 ...
- C Primer Plus 第6版 第二章 编程练习参考答案
编译环境VS Code+WSL GCC /*第一题*************************/ #include<stdio.h> int main() { printf(&quo ...
- (二).NET6.0使用Filter过滤器
1.创建一个webapi方法 2.创建过滤器,继承自Attribute, IAsyncActionFilter 不存在需要先手动引用有关的包:Microsoft.AspNetCore.Mvc 继承 A ...
- Solution Set - “让朝阳洒向晚霞,在星空下涂鸦”
目录 0.「UR #12」「UOJ #182」a^-1 + b problem 1.「NOI Simu.」点 2.「集训队互测 2023」「QOJ #5100」卡牌游戏 3.「NOI Simu.」简单 ...
- 开源搜索引擎Lucene、Solr、Sphinx等优劣势比较
以下重点介绍最常用的开源搜素引擎: 1.Lucene 2.Solr 3.Elasticsearch 4.Sphinx 5.各自的特点和优劣势选型比较 开源搜索引擎分类 主要分为两类:Java开发和C+ ...
- Bottleup pg walkthrough Intermediate
一开始看到page=view/.html的时候就想到目录穿越了尝试../../../../../../../../../../../etc/passwd 发现不行 找半天其他可能存在漏洞的地方又找不到 ...
- 第一届启航杯网络安全大赛部分wp
第一届启航杯 WEB Easy include <?php error_reporting(0); //flag in flag.php $file=$_GET['fil e']; if(iss ...