(65)C# 任务
1.启动任务
//Framework4.5新增的Task.Run开启一个任务,Run方法中传入一个Action委托
Task.Run(()=> { Thread.Sleep(); Console.WriteLine("hello1"); });
Console.WriteLine("abc1"); //Task.Run == Task.Factory.StartNew,后者4.0就可以使用
Task.Factory.StartNew(() => { Thread.Sleep(); Console.WriteLine("hello2"); });
Console.WriteLine("abc2");
Console.ReadLine();

Task默认使用线程池中的线程(线程池中的线程为后台线程)。
Task.run()返回一个Task对象,用于监控任务的执行过程。Status属性追踪执行状态
2.等待任务
Task task= Task.Run(()=> { Thread.Sleep(); Console.WriteLine("hello1"); });
Console.WriteLine("abc1");
//等待里面task任务结束当前线程再后向下执行,相当于Thread.join()
task.Wait();
Console.WriteLine("abc2");
Console.ReadLine();

3.返回值
Task的子类 Task<> 允许任务返回一个值,
Task<string> task = Task.Run(()=>{ Thread.Sleep(); return ""; });
Console.WriteLine("a");
//阻塞
string str = task.Result;
Console.WriteLine(str);
Console.WriteLine("b");
Console.ReadLine();
task.Result为返回结果。如果当前任务没执行完毕则调用该属性会阻塞当前线程。
4.异常
用release调试,为什么暂时不知道....
static void Main(string[] args)
{
Task task = Task.Run(() => throw new Exception("异常"));
try
{
task.Wait();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
Console.ReadLine();
}
5.延迟
方法一、
static void Main(string[] args)
{
Task<int> task = Task.Run(() => { Thread.Sleep(); Console.WriteLine(); return ; });
Console.WriteLine();
var awaiter = task.GetAwaiter();
Console.WriteLine();
awaiter.OnCompleted(() =>
{
int result = awaiter.GetResult();
Console.WriteLine(result);
});
Console.WriteLine();
Console.ReadLine();
}
awaiter.OnCompleted 表示当上个任务执行完毕时,执行附加的后续任务。
如果先前的任务出现了错误,可以在awaiter.GetResult()的时候重新抛出异常

4以后会等待几秒再显示1和999,
如果不加Console.ReadLine(); 1和999还没来及显示就结束了
方法二、
Task<int> task = Task.Run(() => { Thread.Sleep(); Console.WriteLine(); return ; });
Console.WriteLine();
task.ContinueWith(antecedent => { int res = antecedent.Result; Console.WriteLine(res); });
Console.WriteLine();
Console.ReadLine();
这种方式会返回一个Task对象,它更加适合添加更多的延续。但是如果任务出现错误,我们必须处理AggregateException.
如果需要将延续奉送到UI应用程序上,还需要额外代码
再非UI上下文,若希望延续任务和先导任务执行在同一个线程上,还需要指定TaskContiuationOptions.ExecuteSynchronously,不然它会去请求线程池
ContinueWith更适合并行编程场景
6.另一种创建任务的方法
7.异步等待
static void Main(string[] args)
{
Program ds = new Program();
Console.WriteLine("");
ds.ShowDealyAsync();
Console.WriteLine("");
Console.Read();
} public async void ShowDealyAsync()
{
Console.WriteLine("");
await Task.Delay(); //执行到await表达式时,立即返回到调用方法,等待5秒后执行后续部分
Console.WriteLine("");
}
执行到await Task.Delay(5000);时形成分叉路,一方面立即跳回到调用它的方法继续向下执行,同时当前方法等待5秒后向下执行,相当于一个异步版Thread.sheep

显示222一段时间后显示444
异步 lambda表达式
static async Task Main(string[] args)
{
Func<Task> func = async () => { await Task.Delay(); Console.WriteLine("Foo"); };
await func();
Console.WriteLine("abc");
Console.ReadKey();
}
添加到事件的异步
myButton.Click+= async (sender, args) =>
{
await Task.Delay();
....
}
(65)C# 任务的更多相关文章
- STM32 KEIL不能输入仿真引脚端口error 65: access violation at 0x40021000 : no 'read' permission
使用MDK自己创建一个STM32F103ZE核的项目 加入源码后编译,正常,在线仿真单步执行出现如下问题 error 65: access violation at 0x40021000 : no ' ...
- Linux Kernel 3.11.4/3.10.15/3.4.65/3.0.99
Linux 今天又发布了4个更新版本,分别是: 3.11.4 2013-10-05 [tar.xz] [pgp] [patch] [view patch] [view inc] [cgit] [cha ...
- 65行 JavaScript 代码实现 Flappy Bird 游戏
飞扬的小鸟(Flappy Bird)无疑是2014年全世界最受关注的一款游戏.这款游戏是一位来自越南河内的独立游戏开发者阮哈东开发,形式简易但难度极高的休闲游戏,很容易让人上瘾. 这里给大家分享一篇这 ...
- NYOJ题目65另一种阶乘问题
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsIAAAJhCAIAAADE+EHOAAAgAElEQVR4nO3drXLjSAMu4HMT4bmQYF
- Bestcoder round #65 && hdu 5593 ZYB's Tree 树形dp
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...
- Bestcoder round #65 && hdu 5592 ZYB's Premutation 线段树
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...
- Scala 深入浅出实战经典 第65讲:Scala中隐式转换内幕揭秘、最佳实践及其在Spark中的应用源码解析
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- 重新想象 Windows 8 Store Apps (65) - 后台任务: 音乐的后台播放和控制
[源码下载] 重新想象 Windows 8 Store Apps (65) - 后台任务: 音乐的后台播放和控制 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 后台 ...
- Java Axis2 1.6.3+JDK1.7.0_13+Tomcat7.0.65+eclipse搭建web service
安装文件下载: jdk1.7.0_13 安装步骤参考文章:http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html tomcat7. ...
- paper 65 :尺度不变特征变换匹配算法[转载]
尺度不变特征变换匹配算法 对于初学者,从David G.Lowe的论文到实现,有许多鸿沟,本文帮你跨越.1.SIFT综述 尺度不变特征转换(Scale-invariant feature transf ...
随机推荐
- Ubuntu安装byzanz截取动态效果图
byzanz-record主要参数选项 用法: byzanz-record [选项...] 录制您的当前桌面会话 帮助选项: -?, --help 显示帮助选项 --help-all 显示全部帮助选项 ...
- luoguP2123 皇后游戏(贪心)
luoguP2123 皇后游戏(贪心) 题目 洛谷题目chuanso 题解 有一篇好题解,我就懒得推式子了,毕竟打到电脑上还是很难的 牛逼题解传送门 code #include<iostream ...
- hdu4734 F(x)(数位dp)
题目传送门 F(x) Time Limit: 1000/500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 【问题解决方案】关于Python中的语句 ' %matplotlib inline '
跟进小项目#GirlsInAI#-可视化时遇到的语句,之前没有遇到过 在Stack Overflow上看到了一个解释: IPython有一组预定义的"魔术函数",您可以使用命令行样 ...
- elasticsearch 基础 —— Explain、Version、min_score、query rescorer
Explain 相关度得分计算: GET /_search { "explain": true, "query" : { "term" : ...
- 202-基于TI DSP TMS320C6678、Xilinx K7 FPGA XC72K325T的高速数据处理核心板
基于TI DSP TMS320C6678.Xilinx K7 FPGA XC72K325T的高速数据处理核心板 一.板卡概述 该DSP+FPGA高速信号采集处理板由我公司自主研发,包含一片TI DSP ...
- javaweb各种框架组合案例(五):springboot+mybatis+generator
一.介绍 1.springboot是spring项目的总结+整合 当我们搭smm,ssh,ssjdbc等组合框架时,各种配置不胜其烦,不仅是配置问题,在添加各种依赖时也是让人头疼,关键有些jar包之间 ...
- 2019CCPC网络预选赛 1004 path 最短路
题意:给你一张n个点m条边的有向图,问这张有向图的所有路径中第k短的路径长度是多少?n, m, k均为5e4级别. 思路:前些日子有一场div3的F和这个题有点像,但是那个题要求的是最短路,并且k最大 ...
- Vue 列表渲染中的key
首先看一下官网的论述: 当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略.如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序, 而是简单 ...
- HTML基础 有序列表写个人收藏夹
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...