首页 > 代码库 > 一个简单的类理解清楚 Async/Await
一个简单的类理解清楚 Async/Await
项目下,一个同事遇到一个问题,关于Async/Await使用时导致的,花了一点时间写了一个简单的类帮他理解async是否开启线程、是否同步执行。分享到这里。
可将此代码粘贴到linqpad中执行
1 void Main() 2 { 3 ("主线程ID="+ Thread.CurrentThread.ManagedThreadId.ToString()).Dump(); 4 new MyClass(); 5 } 6 7 public class MyClass 8 { 9 public MyClass() 10 { 11 DisplayValue(); //这里不会阻塞 12 ("myclass 类 threadid="+ Thread.CurrentThread.ManagedThreadId.ToString()).Dump();13 } 14 public Task<double> GetValueAsync(double num1, double num2) 15 { 16 System.Threading.Thread.Sleep(3000);17 return Task.Run(() => 18 { 19 for (int i = 0; i < 1000000; i++) 20 { 21 num1 = num1 / num2; 22 } 23 ("GetValueAsync 线程ID="+ Thread.CurrentThread.ManagedThreadId.ToString()).Dump();24 return num1; 25 }); 26 27 } 28 public async void DisplayValue() 29 { 30 ("DisplayValue进入时的线程 threadid="+ Thread.CurrentThread.ManagedThreadId.ToString()).Dump();31 double result = await GetValueAsync(1234.5, 1.01);//此处会开新线程处理GetValueAsync任务,然后方法马上返回 32 string.Format(" 计算结果 :[{0}]",result).Dump();33 34 ("DisplayValue结束时 threadid="+ Thread.CurrentThread.ManagedThreadId.ToString()).Dump();35 } 36 }
linqpad的执行结果如下
主线程ID=24DisplayValue进入时的线程 threadid=24myclass 类 threadid=24GetValueAsync 线程ID=21 计算结果 :[2.47032822920623E-322]DisplayValue结束时 threadid=21
参考微软官方链接
一个简单的类理解清楚 Async/Await
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。