架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 18449|回复: 5

[资料] .net/c# Task类与async/await

[复制链接]
发表于 2017-10-20 22:32:17 | 显示全部楼层 |阅读模式
Task 类

Task类是.NET 4.0之后提供的异步操作抽象,完整路径为System.Threading.Tasks.Task。

Task类用于表示无返回值的异步操作,对于带有返回值的异步操作应使用Task类的子类Task<TResult>。
Task类创建的任务会加入线程池中。

Task/Task<TResult>类的主要构造函数如下:


创建完毕的Task可以使用Start()方法开始执行:


在实际开发中,更多情况下使用Task类的静态方法Run()或者工厂类TaskFactory的成员方法StartNew()来创建和启动新的任务。

Task类中的一些常用方法:


async/await 关键字

C# 5.0之后引入了async和await关键字,在语言层面给予了并发更好的支持。

async用于标记异步方法:
async关键字是上下文关键字,只有在修饰方法与Lambda时才会被当作关键字处理,在其它区域将被作为标识符处理。
async关键字可以标记静态方法,但不能标记入口点(Main()方法)。
async标记的方法返回值必须为Task、Task<TResult>、void其中之一。
await用于等待异步方法的结果:
await关键字同样是上下文关键字,只有在async标记的方法中才被视为关键字。
await关键字可以用在async方法和Task、Task<TResult>之前,用于等待异步任务执行结束。
一个简单的async方法结构如下:
并不是方法使用async关键字标记了就是异步方法,直接出现在async方法内部的语句也是同步执行的异步执行的内容需要使用Task类执行
事实上,一个不包含任何await语句的async方法将是同步执行的,此时编译器会给出警告。

简单示例,使用async/await在屏幕并发输出内容:

输出结果:(Mono 4.4.0 && ArchLinux x64)

由上述程序中不难看出,在async关键字标记的异步方法中,使用await之前的代码都是同步执行的,在调用了await之后,剩余的代码便异步运行在独立的线程。





上一篇:fsadf{:1_2:}
下一篇:RestSharp 一个.NET(C#)的HTTP辅助类组件
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2017-11-1 19:57:12 | 显示全部楼层
看看看看看看看看看看
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-1-29 09:37:53 | 显示全部楼层
在百度搜了半天c#async Task Invoke()的意思,搜到自己站来了上面这个方法是用async关键字 返回一个Task类的  Invoke方法也是解决线程问题的 这整个函数的意义是什么呢
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-1-29 21:14:36 | 显示全部楼层
这个真的是个好东西,等我有时间了也写一篇这样的分享
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-2-15 16:17:22 | 显示全部楼层
输出结果不能形象的看出 异步执行的效果 异步应该是同时输入吧
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-25 22:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表