当一个方法中有很多复杂的操作的时候就可以使用异步编程。

假如说这一个方法中有很多复杂的操作,把每一个复杂的操作放到一个异步方法中。

原来程序需要这些方法,上一个执行完成之后,才能执行下一个操作。

但是使用异步的方法,可以把这些复杂的操作给肢解了,把每一个复杂的操作都放到一个异步方法中,然后同时执行这些复杂的操作。

        /// 在控制台中调用这个方法
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#异步编程简单的运用的更多相关文章

  1. javascript异步编程的前世今生,从onclick到await/async

    javascript与异步编程 为了避免资源管理等复杂性的问题, javascript被设计为单线程的语言,即使有了html5 worker,也不能直接访问dom. javascript 设计之初是为 ...

  2. 5分种让你了解javascript异步编程的前世今生,从onclick到await/async

      javascript与异步编程 为了避免资源管理等复杂性的问题,javascript被设计为单线程的语言,即使有了html5 worker,也不能直接访问dom. javascript 设计之初是 ...

  3. angularjs系列之轻松使用$q进行异步编程

    第一部分关于js中的异步编程 异步编程简单的说就是你写了一段代码,但他不会按照你书写代码的顺序立即执行,而是等到程序中发生了某个事件(如用户点击了某个按钮,某个ajax请求得到了响应)才去执行这段代码 ...

  4. python 异步编程

    Python 3.5 协程究竟是个啥 Yushneng · Mar 10th, 2016 原文链接 : How the heck does async/await work in Python 3.5 ...

  5. 【转】【C#】C# 5.0 新特性——Async和Await使异步编程更简单

    一.引言 在之前的C#基础知识系列文章中只介绍了从C#1.0到C#4.0中主要的特性,然而.NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两 ...

  6. 简单实现异步编程promise模式

    本篇文章主要介绍了异步编程promise模式的简单实现,并对每一步进行了分析,需要的朋友可以参考下 异步编程 javascript异步编程, web2.0时代比较热门的编程方式,我们平时码的时候也或多 ...

  7. C#实现异步编程的两个简单机制(异步委托&定时器)及Thread实现多线程

    创建线程的常用方法:异步委托.定时器.Thread类 理解程序.进程.线程三者之间的区别:简而言之,一个程序至少有一个进程,一个进程至少有一个线程进程就是在内存中运行的程序(即运行着的程序):一个进程 ...

  8. 转:[你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单

    本专题概要: 引言 同步代码存在的问题 传统的异步编程改善程序的响应 C# 5.0 提供的async和await使异步编程更简单  async和await关键字剖析 小结 一.引言 在之前的C#基础知 ...

  9. [你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单

    本专题概要: 引言 同步代码存在的问题 传统的异步编程改善程序的响应 C# 5.0 提供的async和await使异步编程更简单  async和await关键字剖析 小结 一.引言 在之前的C#基础知 ...

随机推荐

  1. Hadoop 分布式环境搭建

    一.前期环境 安装概览 IP Host Name Software Node 192.168.23.128 ae01 JDK 1.7 NameNode, SecondaryNameNode, Data ...

  2. Android视频

    http://mars.apkbus.com/ http://dl.dbank.com/c0y2tnjnxz csdn http://blog.csdn.net/softwave/article/ca ...

  3. Ubuntu 16.04 LTS 安装R及RStudio Server

    1.R的安装 1.1首先添加镜像源 # Ctrl+Alt+T打开终端 $ sudo gedit /etc/apt/sources.list # 加入新镜像源 回车之后会自动跳出一个文本框,然后在相似的 ...

  4. 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 ...

  5. IE下margin:0 auto为什么不居中?

    http://blog.sina.com.cn/s/blog_68c6be330101k7kn.html 我们经常用DIV+CSS布局网页的时候,正常情况下需要将div居中显示时,使用Css样式:ma ...

  6. hdu1181 变形课

    Problem Description 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个 ...

  7. Android 模糊效果

    (1)FastBlur http://www.cnblogs.com/CharlesGrant/p/4813735.html (2)StackBlur 基于RenderScript,StackBlur ...

  8. Android & iOS 第三方 Crash ANR 捕捉上传

    1. Bugly 地址:http://bugly.qq.com/ 提供:专业的Crash(崩溃).Android ANR(application not response).iOS卡顿监控和解决方案. ...

  9. Leetcode Add Binary

    Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...

  10. Hightcharts设置Y轴最大最小值

    有两种方法: 1:是在控件初始化时预设, yAxis: [{ max:}] 2:在程序运行中动态更新设置 thChart.yAxis[].update({ min: , max: });