C#异步编程简单的运用
当一个方法中有很多复杂的操作的时候就可以使用异步编程。
假如说这一个方法中有很多复杂的操作,把每一个复杂的操作放到一个异步方法中。
原来程序需要这些方法,上一个执行完成之后,才能执行下一个操作。
但是使用异步的方法,可以把这些复杂的操作给肢解了,把每一个复杂的操作都放到一个异步方法中,然后同时执行这些复杂的操作。
/// 在控制台中调用这个方法
static void TaskWait()
{
//创建一个异步任务
Task<int> task = new Task<int>(() =>
{
int aa = ;
Console.WriteLine("异步方法中执行操作开始");
for (int i = ; i < ; i++)
{
aa += i;
}
Console.WriteLine("异步方法中执行操作结束");
return aa;
});
//启动 System.Threading.Tasks.Task,并将它安排到当前的 System.Threading.Tasks.TaskScheduler中执行。
task.Start(); Console.WriteLine("主线程执行其他处理1");
Console.WriteLine("主线程执行其他处理2");
Console.WriteLine("主线程执行其他处理3");
Console.WriteLine("主线程执行其他处理4");
Console.WriteLine("主线程执行其他处理5"); //等待任务的完成执行过程。
task.Wait();
//获得任务的执行结果
Console.WriteLine("任务执行结果---" + task.Result.ToString());
}
这样就可以把一些比较费时的操作拿出来,进行异步操作,就可以节省一部分时间。
当有多个很费时的操作的时候,并且下一个操作需要用到上一个操作返回结果的时候,可以使用下面的这种方式。
/// 在控制台中调用这个方法
static void TaskContinueWith()
{
//创建一个异步任务
Task<int> task = new Task<int>(() =>
{
int aa = ;
Console.WriteLine("异步方法中执行操作开始");
for (int i = ; i < ; i++)
{
aa += i;
}
Console.WriteLine("异步方法中执行操作结束");
return aa;
});
//启动任务,并安排到当前任务队列线程中执行任务(System.Threading.Tasks.TaskScheduler)
task.Start();
Console.WriteLine("主线程执行其他处理1");
Console.WriteLine("主线程执行其他处理2");
Console.WriteLine("主线程执行其他处理3");
Console.WriteLine("主线程执行其他处理4");
Console.WriteLine("主线程执行其他处理5");
//任务完成时执行处理。
Task<int> cwt = task.ContinueWith(t =>
{
Console.WriteLine("第二个操作需要用到第一个操作的返回结果" + t.Result.ToString());
int aa = ;
Console.WriteLine("第二个---异步方法中执行操作开始");
for (int i = ; i < ; i++)
{
aa += i;
}
Console.WriteLine("第二个---异步方法中执行操作结束");
return aa;
});
//cwt.Start();//这里不需要再启动这个Task方法了
cwt.Wait(); Console.WriteLine("第二个---异步方法的返回结果---" + cwt.Result.ToString()); }
C#异步编程简单的运用的更多相关文章
- javascript异步编程的前世今生,从onclick到await/async
javascript与异步编程 为了避免资源管理等复杂性的问题, javascript被设计为单线程的语言,即使有了html5 worker,也不能直接访问dom. javascript 设计之初是为 ...
- 5分种让你了解javascript异步编程的前世今生,从onclick到await/async
javascript与异步编程 为了避免资源管理等复杂性的问题,javascript被设计为单线程的语言,即使有了html5 worker,也不能直接访问dom. javascript 设计之初是 ...
- angularjs系列之轻松使用$q进行异步编程
第一部分关于js中的异步编程 异步编程简单的说就是你写了一段代码,但他不会按照你书写代码的顺序立即执行,而是等到程序中发生了某个事件(如用户点击了某个按钮,某个ajax请求得到了响应)才去执行这段代码 ...
- python 异步编程
Python 3.5 协程究竟是个啥 Yushneng · Mar 10th, 2016 原文链接 : How the heck does async/await work in Python 3.5 ...
- 【转】【C#】C# 5.0 新特性——Async和Await使异步编程更简单
一.引言 在之前的C#基础知识系列文章中只介绍了从C#1.0到C#4.0中主要的特性,然而.NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两 ...
- 简单实现异步编程promise模式
本篇文章主要介绍了异步编程promise模式的简单实现,并对每一步进行了分析,需要的朋友可以参考下 异步编程 javascript异步编程, web2.0时代比较热门的编程方式,我们平时码的时候也或多 ...
- C#实现异步编程的两个简单机制(异步委托&定时器)及Thread实现多线程
创建线程的常用方法:异步委托.定时器.Thread类 理解程序.进程.线程三者之间的区别:简而言之,一个程序至少有一个进程,一个进程至少有一个线程进程就是在内存中运行的程序(即运行着的程序):一个进程 ...
- 转:[你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单
本专题概要: 引言 同步代码存在的问题 传统的异步编程改善程序的响应 C# 5.0 提供的async和await使异步编程更简单 async和await关键字剖析 小结 一.引言 在之前的C#基础知 ...
- [你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单
本专题概要: 引言 同步代码存在的问题 传统的异步编程改善程序的响应 C# 5.0 提供的async和await使异步编程更简单 async和await关键字剖析 小结 一.引言 在之前的C#基础知 ...
随机推荐
- Hadoop 分布式环境搭建
一.前期环境 安装概览 IP Host Name Software Node 192.168.23.128 ae01 JDK 1.7 NameNode, SecondaryNameNode, Data ...
- Android视频
http://mars.apkbus.com/ http://dl.dbank.com/c0y2tnjnxz csdn http://blog.csdn.net/softwave/article/ca ...
- Ubuntu 16.04 LTS 安装R及RStudio Server
1.R的安装 1.1首先添加镜像源 # Ctrl+Alt+T打开终端 $ sudo gedit /etc/apt/sources.list # 加入新镜像源 回车之后会自动跳出一个文本框,然后在相似的 ...
- Eclipse: JPA problem: Eclipse does not recognize content of persistence.xml
Link: http://stackoverflow.com/questions/3701901/eclipse-does-not-recognize-content-of-persistence-x ...
- IE下margin:0 auto为什么不居中?
http://blog.sina.com.cn/s/blog_68c6be330101k7kn.html 我们经常用DIV+CSS布局网页的时候,正常情况下需要将div居中显示时,使用Css样式:ma ...
- hdu1181 变形课
Problem Description 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个 ...
- Android 模糊效果
(1)FastBlur http://www.cnblogs.com/CharlesGrant/p/4813735.html (2)StackBlur 基于RenderScript,StackBlur ...
- Android & iOS 第三方 Crash ANR 捕捉上传
1. Bugly 地址:http://bugly.qq.com/ 提供:专业的Crash(崩溃).Android ANR(application not response).iOS卡顿监控和解决方案. ...
- Leetcode Add Binary
Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...
- Hightcharts设置Y轴最大最小值
有两种方法: 1:是在控件初始化时预设, yAxis: [{ max:}] 2:在程序运行中动态更新设置 thChart.yAxis[].update({ min: , max: });