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

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

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

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

        /// 在控制台中调用这个方法
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. ie不支持getElementsByName的解决办法

    在chrome下getElementsByName运行正常,可在IETester7~11下都不支持  w3c规范中getElementsByName是按着name属性进行检索的,而MS的IE却是按着i ...

  2. Repeater 双向排序

      做项目的时候,DataGrid ,DataList,Repeater 三个控件都是很优秀的数据显示控件,DataGrid的方便,简单易用,功能强大,但对性能会有所影响,在loading页面的时候大 ...

  3. win7 删除Windows服务的方法

    http://www.jb51.net/os/windows/25090.html 一.什么是Windows服务 Windows服务也称为Windows Service,它是Windows操作系统和W ...

  4. CORS(跨域资源共享)简介

    前言:像CORS对于现代前端这么重要的技术在国内基本上居然很少有人使用和提及,在百度或者Google上搜索CORS,搜到的中文文章基本都是另外一种卫星定位技术CORS的介绍,让我等前端同学情何以堪(对 ...

  5. [Leetcode] Interleaving String

    Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example,Given:s1 = ...

  6. 【BZOJ】2084: [Poi2010]Antisymmetry

    http://www.lydsy.com/JudgeOnline/problem.php?id=2084 题意:一个01串,求满足字符串0和1取反后,再将整个串反过来和原串一样的子串数目.(n< ...

  7. 【ZOJ】3329 One Person Game

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3754 题意:有三个色子,分别有k1.k2.k3个面,权值分别是1-k1, 1~ ...

  8. 【bzoj2333】 [SCOI2011]棘手的操作 可并堆+lazy标记

    2016-05-31  21:45:41 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2333 (学习了黄学长的代码 有如下操作: U x y ...

  9. 开源工作流引擎CCFlow 学习专区

    http://bbs.ccflow.org/index.aspx 官网:http://www.ccflow.org/

  10. [LintCode] Valid Palindrome 验证回文字符串

    Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...