标签: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