浅谈Task多线程剖析await关键字

浅谈Task多线程剖析await关键字

引言

其实谈到多线程吧,首先应该联想到的是异步;那么异步究竟是什么呢?异步其实就好像你在家里做饭一样:同样的时间,你可以在用电饭锅煮饭的时候,这个煮饭的过程电饭锅煮它的,你只需要知道它在煮着的就是,但是不影响你又在进行洗或是炒菜的这个过程,仅此而已!比喻不太恰当,但意义就是这样,说的高大上点,就是利用CPU的时间片,通过线程来挂起任务,不必等到极大耗时的那个程序步骤或者方法执行完,才给你反馈结果,而是确保编译通过的情况下,让执行的过程挂起到后台的进程去慢慢执行,而你立马就能得到一个执行成功的结果,实质上是这个任务在计算机后台进程中一个一个的执行,却不影响你做接下来的操作,真的很nice!

一、异步线程

以这段代码为例,Task开启两个线程用于执行任务,其实也就是所谓的多线程,想开多少个就多少个,在整个处理的过程中,只要不产异常的情况,主线程立即就执行完了,而不必等待两个线程完才来执行主线程,这就是异步的效用;就好像你发出一个Http请求,同时批量倒入成千上万的数据,它会立即就告诉你导入的结果,而不是将这成千上万的数据导完后才告诉你结果;其实也就是,电饭锅你煮你的饭,电磁炉你熬你汤,一点也也不影响我在这个过程中睡了一觉后,再来看会剧!

       static void Main(string[] args)
        {
            Task.Run(() =>
            {
                for (int i = 0; i < 10; i++)
                {
                    Console.WriteLine("task1-" + i);
                }
            });
            Task.Run(() =>
            {
                for (int i = 0; i < 10; i++)
                {
                    Console.WriteLine("task2-" + i);
                }
            });
            Console.WriteLine("===========主线程==========");
            Console.ReadKey();
        }

在这里插入图片描述

二、await的妙用

通过这段代码,我们可以看出,awit关键字的作用就是等待上一个线程的执行结果返回以后,我才接受新的线程执行 新的任务!这种情况比较适用于,很依赖上一个await 执行的结果,才能支撑起下一个进程任务的执行的情况!

        static async Task Main(string[] args)
        {
            await Task.Run(() =>
            {
                for (int i = 0; i < 10; i++)
                {
                    Console.WriteLine("task1-" + i);
                }
            });
            await Task.Run(() =>
            {
                for (int i = 0; i < 10; i++)
                {
                    Console.WriteLine("task2-" + i);
                }
            });
            Console.WriteLine("===========主线程==========");
            Console.ReadKey();
        }

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值