注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天涯倦客的博客

祝福你朋友永远快乐!

 
 
 

日志

 
 

C#中Task任务和Async、Await异步非阻塞方式  

2018-02-27 16:42:43|  分类: C# |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  1. 转自:http://blog.csdn.net/smartsmile2012/article/details/72637297
  2. using System;  
  3. using System.Collections.Generic;  
  4. using System.Linq;  
  5. using System.Text;  
  6. using System.Threading;  
  7. using System.Threading.Tasks;  
  8.   
  9. namespace TaskSample  
  10. {  
  11.     class Program  
  12.     {  
  13.         static void Main(string[] args)  
  14.         {  
  15.             Console.WriteLine("我是主线程,线程ID:" + Thread.CurrentThread.ManagedThreadId);  
  16.             //task用法一  
  17.             Task task1 = new Task(() => MyAction());  
  18.             task1.Start();  
  19.   
  20.             //task用法二  
  21.             var strRes = Task.Run<string>(() => { return GetReturnStr(); });  
  22.             Console.WriteLine(strRes.Result);  
  23.   
  24.             //task->async异步方法和await,主线程碰到await时会立即返回,继续以非阻塞形式执行主线程下面的逻辑  
  25.             Console.WriteLine("---------------------------------");  
  26.             Console.WriteLine("①我是主线程,线程ID:{0}", Thread.CurrentThread.ManagedThreadId);  
  27.             var testResult = TestAsync();  
  28.             Console.ReadKey();  
  29.         }  
  30.   
  31.         static async Task TestAsync()  
  32.         {  
  33.             Console.WriteLine("②调用GetReturnResult()之前,线程ID:{0}。当前时间:{1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));  
  34.             var name = GetReturnResult();  
  35.             Console.WriteLine("④调用GetReturnResult()之后,线程ID:{0}。当前时间:{1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));  
  36.             Console.WriteLine("⑥得到GetReturnResult()方法的结果一:{0}。当前时间:{1}", await name, DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));  
  37.             Console.WriteLine("⑥得到GetReturnResult()方法的结果二:{0}。当前时间:{1}", name.GetAwaiter().GetResult(), DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));  
  38.         }  
  39.   
  40.         static async Task<string> GetReturnResult()  
  41.         {  
  42.             Console.WriteLine("③执行Task.Run之前, 线程ID:{0}", Thread.CurrentThread.ManagedThreadId);  
  43.             return await Task.Run(() =>  
  44.             {  
  45.                 Thread.Sleep(2000);  
  46.                 Console.WriteLine("⑤GetReturnResult()方法里面线程ID: {0}", Thread.CurrentThread.ManagedThreadId);  
  47.                 return "我是返回值";  
  48.             });  
  49.         }  
  50.   
  51.         static void MyAction()  
  52.         {  
  53.             Console.WriteLine("我是新进程,线程ID:" + Thread.CurrentThread.ManagedThreadId);  
  54.         }  
  55.   
  56.         static string GetReturnStr()  
  57.         {  
  58.             return "我是返回值,线程ID:" + Thread.CurrentThread.ManagedThreadId;  
  59.         }  
  60.     }  
  61. }  
  评论这张
 
阅读(29)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018