C#异步编程简单的运用

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

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

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

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

        /// 在控制台中调用这个方法
        static void TaskWait()
        {
            //创建一个异步任务
            Task<int> task = new Task<int>(() =>
            {
                int aa = 0;
                Console.WriteLine("异步方法中执行操作开始");
                for (int i = 0; i < 1000; 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 = 0;
                Console.WriteLine("异步方法中执行操作开始");
                for (int i = 0; i < 1000; 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 = 0;
                Console.WriteLine("第二个---异步方法中执行操作开始");
                for (int i = 0; i < 1000; i++)
                {
                    aa += i;
                }
                Console.WriteLine("第二个---异步方法中执行操作结束");
                return aa;
            });
            //cwt.Start();//这里不需要再启动这个Task方法了
            cwt.Wait();

            Console.WriteLine("第二个---异步方法的返回结果---" + cwt.Result.ToString());

        }
时间: 2024-10-15 03:07:44

C#异步编程简单的运用的相关文章

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

 第一部分关于js中的异步编程 异步编程简单的说就是你写了一段代码,但他不会按照你书写代码的顺序立即执行,而是等到程序中发生了某个事件(如用户点击了某个按钮,某个ajax请求得到了响应)才去执行这段代码,而且这段代码可能执行一次(如一个ajax请求得到了响应).也可能执行很多次或者不执行(一个按钮被点击了许多次或者0次)这就是所谓的异步编程. 有两种异步程序模式单次执行模式和监听执行模式.像ajax请求这样的就是属于单次执行模式,请求.回调只会进行一次.像事件绑定就属于监听执行模式,只要事件发生

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

javascript与异步编程 为了避免资源管理等复杂性的问题,javascript被设计为单线程的语言,即使有了html5 worker,也不能直接访问dom. javascript 设计之初是为浏览器设计的GUI编程语言,GUI编程的特性之一是保证UI线程一定不能阻塞,否则体验不佳,甚至界面卡死. 一般安卓开发,会有一个界面线程,一个后台线程,保证界面的流畅.由于javascript是单线程,所以采用异步非阻塞的编程模式,javascript的绝大多数api都是异步api. 本文是本人的一个

异步编程的学习

常见的三种异步编程 EAP 基于事件的异步程序.比如下载完成后事件的处理函数会执行,也就是说一个异步方法配一个执行事件,优点是简单,缺点是当实现复杂的业务的时候很麻烦. private void button1_Click(object sender, EventArgs e) { //eap基于事件的异步编程 //EAP异步编程 当下面的代码下载完成后,并不是提交后完成的,而是在事件中处理提示完成的 //也就是EAP编程中一个异步方法配一个异步事件,当方法提交后,剩下的由事件来处理 WebCl

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

一.引言 在之前的C#基础知识系列文章中只介绍了从C#1.0到C#4.0中主要的特性,然而.NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作,下面就具体看看编译器到底在背后帮我们做了哪些复杂的工作的. 二.同步代码存在的问题 对于同步的代码,大家肯定都不陌生,因为我们平常写的代码大部分都是同步的,然而同步代码却存在一个很严重的问题,例如我们向一个Web服务器发出一个

简单实现异步编程promise模式

本篇文章主要介绍了异步编程promise模式的简单实现,并对每一步进行了分析,需要的朋友可以参考下 异步编程 javascript异步编程, web2.0时代比较热门的编程方式,我们平时码的时候也或多或少用到,最典型的就是异步ajax,发送异步请求,绑定回调函数,请求响应之后调用指定的 回调函数,没有阻塞其他代码的执行.还有像setTimeout方法同样也是异步执行回调的方法. 如果对异步编程还不太熟悉的话,直接戳 阮一峰大牛的教程 ,这篇文章介绍了四种异步编程的方式: 回调函数 事件监听 发布

C#实现异步编程的两个简单机制

理解程序.进程.线程三者之间的区别:简而言之,一个程序至少有一个进程,一个进程至少有一个线程进程就是在内存中运行的程序(即运行着的程序):一个进程一般只有一个线程,一个进程可以包含多个线程(多线程编程): 使用异步编程的简单机制一:异步委托    委托类型的BeginInvoke和EndInvoke方法.        BeginInvoke方法:            参数组成:引用方法的参数列表+callback参数+state参数            返回值:IAsyncResult接口

简单地使用线程之一:使用异步编程模型

.NetFramework的异步编程模型从本质上来说是使用线程池来完成异步的任务,异步委托.HttpWebRequest等都使用了异步模型. 这里我们使用异步委托来说明异步编程模型. 首先,我们来明确一下,对于多线程来说,我们需要关注哪些问题. “线程是一段执行中的代码流”,从这句话中,我们可以关注这段代码流何时开始执行.何时结束.从主线程如何传递参数至从子线程.从子线程如何返回结果至主线程? 问题1:在异步编程模型中,子线程何时开始执行? 对于异步编程模型来说,使用BeginXXX来开始执行线

利用 Python yield 创建协程将异步编程同步化

在 Lua 和 Python 等脚本语言中,经常提到一个概念: 协程.也经常会有同学对协程的概念及其作用比较疑惑,本文今天就来探讨下协程的前世今生. 首先回答一个大家最关心的问题:协程的好处是什么? 通俗易懂的回答: 让原来要使用 异步 + 回调 方式写的非人类代码,可以用看似同步的方式写出来. 1.回顾同步与异步编程 同步编程即线性化编程,代码按照既定顺序执行,上一条语句执行完才会执行下一条,否则就一直等在那里. 但是许多实际操作都是CPU 密集型任务和 IO 密集型任务,比如网络请求,此时不

探索Javascript 异步编程

在我们日常编码中,需要异步的场景很多,比如读取文件内容.获取远程数据.发送数据到服务端等.因为浏览器环境里Javascript是单线程的,所以异步编程在前端领域尤为重要. 异步的概念 所谓异步,是指当一个过程调用发出后,调用者不能立刻得到结果.实际处理这个调用的过程在完成后,通过状态.通知或者回调来通知调用者. 比如我们写这篇文字时点击发布按钮,我们并不能马上得到文章发布成功或者失败.等待服务器处理,这段时间我们可以做其他的事情,当服务器处理完成后,通知我们是否发布成功. 所谓同步,是指当一个过