码迷,mamicode.com
首页 > 其他好文 > 详细

async,await与task.wait()或task.Result的区别

时间:2020-04-21 18:17:04      阅读:592      评论:0      收藏:0      [点我收藏+]

标签:ack   code   sleep   rgs   执行   接下来   thread   div   的区别   

你是否曾经与我一样不理解async,await与task.wait()或者task.Result的区别?

接下来,一个Demo让你看出他们之间的区别。

  static void Main(string[] args)
        {
            Console.WriteLine("start");
            Test(); //不等待
            Console.WriteLine("end");
            Console.Read();
        }

        static Task<int> Sleep()
        {
            Console.WriteLine("Sleep start");
            Thread.Sleep(1000);
            Console.WriteLine("Sleep end");
            return Task.FromResult(100);
        }
        
        static Task<int> Test()
        {
            Console.WriteLine("Test start");
            var a=Task.Run(Sleep).Result;//由上一篇文章可知Run将会在线程池内调度执行
            Console.WriteLine("Test end");
            return Task.FromResult(a);
        }

运行结果:

start
Test start
Sleep start
Sleep end
Test end
end

由此可以看出Task.Result会阻塞主线程。

 

        static void Main(string[] args)
        {
            Console.WriteLine("start");
            TestAsync();//不等待

            Console.WriteLine("end");
            Console.Read();
        }

        static Task<int> Sleep()
        {
            Console.WriteLine("Sleep start");
            Thread.Sleep(1000);
            Console.WriteLine("Sleep end");
            return Task.FromResult(100);
        }
        static async Task<int> TestAsync()
        {
            Console.WriteLine("Test start");
            var a = await Task.Run(Sleep);
            Console.WriteLine("Test end");
            return a;
        }

运行结果:

start
Test start
Sleep start
end
Sleep end
Test end

async,await不会阻塞主线程

 

async,await与task.wait()或task.Result的区别

标签:ack   code   sleep   rgs   执行   接下来   thread   div   的区别   

原文地址:https://www.cnblogs.com/sosoeasy/p/12746021.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!