整理:C#中async与await异步方法的示例

目的:了解异步方法async、await的写法和执行步骤

 

一、执行代码如下

class Program
    {
        static void Main(string[] args)
        {
            //  Do:开始主线程
            Debug.WriteLine("Step 1");


            //  Do:调用异步方法
            Task t = BeginRead();

            //  Do:注册异步方法返回时触发的方法
            t.ContinueWith(l => Debug.WriteLine("Step 4"));

            //  Do:执行主线程
            while (true)
            {
                Debug.WriteLine("Working");
                Thread.Sleep(1000);
            }
        }
        
       static async Task BeginRead()
        {

            Thread.Sleep(3000);

            Debug.WriteLine("Step 2");

            //  Do:使用await等待一个线程(在此过程中,返回到了主线程中,但没有触发Task.Continue方法)
            await Task.Run(()=>
            {
                int count = 3;

                while (count>0)
                {
                    Thread.Sleep(3000);
                    Debug.WriteLine("await...");
                    count--;
                }
            });

            //  Do:当await执行完后才继续执行下面方法
            Thread.Sleep(3000);

            Debug.WriteLine("Step 3");

        }
    }

二、输入结果如下:

Step 1
Step 2
Working
Working
Working
await...
Working
Working
Working
await...
Working
Working
Working
await...
Working
Working
Working
Step 3
Step 4
Working
Working
Working

 

三、执行过程说明

1、由输出结果可见执行的步骤是按照Step严格执行的

2、调用await前的语句执行的是在上一个线程中执行,在await后面中执行的则是在新线程中执行的,即Step2虽然在async方法中,但是是在主线程中执行,await后面的则会异步执行;

3、值得注意的是异步方法返回的Task.ContinueWith任务则是在await后面所有代码都执行完才执行

4、如果async中没有加await会出现async中所有步骤都是在主线程中执行

5、await的三个作用:a、接收一个Task结果;b、在接收的Task线程中执行await后面代码;c、执行完代码后返回一个Task给async方法;

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值