async,await与task.wait()或task.Result的区别
Posted sosoeasy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了async,await与task.wait()或task.Result的区别相关的知识,希望对你有一定的参考价值。
你是否曾经与我一样不理解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的区别的主要内容,如果未能解决你的问题,请参考以下文章