async/await 基于任务的异步模式学习

最近在学习.net4.5推出的基于任务的异步模式的学习,记录部分笔记以便日后回顾:
上代码:

using System;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp5
{
    class Program
    {
        static   void Main(string[] args)
        {
            Print();
            Console.WriteLine("返回主线程");
            Thread.Sleep(150200);//这段代码是必须的,模拟前台线程一直在工作因为异步开启的是后台线程,如果main的主线程退出,后台线程会自动退出
        }

        public static async void Print()//供调用方调用的异步方法:
        {
            Console.WriteLine(" print begin");

            string s = await OutPut();
            Console.WriteLine("呵呵");
            await DoSomeThing();
            Console.WriteLine(s);          

        }
        public static Task<string> OutPut()//任务方法(带有返回值)
        {          
            Task<string> task = new Task<string>(() => { Thread.Sleep(5000);Console.WriteLine("Output OK"); return "simon"; });
            task.Start();
            return task;
        }

        public static Task DoSomeThing()//任务方法(不带返回值)
        {         
            var task= new Task(() => { Thread.Sleep(3000); Console.WriteLine("DoSomeThing OK"); });
            task.Start();
            return task;
        }

//要点:
        //异步方法是指可通过await关键字将线程的控制权还给调用方从而实现调用方不被阻塞而任务方法也可以同时执行的方法,由此实现异步,可以认为是在调用方和任务方法直接加的一个具有异步能力中间层。
        //这里涉及到三个角色方法:异步方法调用方;带有async/await的异步方法;异步方法内await后跟的返回Task的任务方法
        //三个方法内部都是同步执行的,例如上的Print方法内部一定是同步执行,只是通过await实现调用方Main的异步(以前一直以为异步方法是其本身可以异步)
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值