.Net中Task使用来提高代码执行效率
技术不断更新迭代,更高效的执行效率越来越被重视,所以对Task的使用进行了简单使用做了整理与大家分享。
.Net 中有了Task后使多线程编程更简单使用和操作,下面粘上代码进行简单说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /// <summary> /// 主线程执行 /// </summary> private static void GetVaule() { Console.WriteLine( "我不是task,我的信息是,线程{0} 运行在线程id为{1}的线程上。是否是线程池中线程?:{2}" , "同步" , Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread); //主线程2 } static int TaskMethod( string name) { Console.WriteLine( "Task {0} 运行在线程id为{1}的线程上。是否是线程池中线程?:{2}" , name, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread); Thread.Sleep(2000); Console.WriteLine( "睡醒后,的位置" + DateTime.Now.ToString( "yyyy-MM-dd HH:mm:ss:ffff" ) + "" ); // task线程1 Return 42; } /// <summary> /// 开启新线程执行。 /// </summary> /// <param name="name"></param> /// <returns></returns> static Task< int > CreateTask( string name) { return new Task< int >(() => TaskMethod(name)); } |
以上方法是为实例准备的方法调用 主方法调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Task< int > task = CreateTask( "Task 3" ); Console.WriteLine(task.Status); task.Start(); GetVaule(); Console.WriteLine( "主线和Id:" + Thread.CurrentThread.ManagedThreadId + ",IsCurrentThreadPool:" + Thread.CurrentThread.IsThreadPoolThread + "" ); //主线程1 Console.WriteLine( "我的位置1_" +DateTime.Now+ "" ); Console.WriteLine( "Result is1: {0}" , task.Result); // part_001 Console.WriteLine( "我的位置" ); while (!task.IsCompleted) { Console.WriteLine(task.Status); Thread.Sleep(TimeSpan.FromSeconds(0.5)); } Console.WriteLine(task.Status); //int result = task.Result; // part_002 //Console.WriteLine("Result is: {0}", result); Console.ReadKey(); |
执行后大家可以发现//主线程1和GetVaule中//主线程2 输出的线程 Id 是相同的 与TaskMethod 中// task线程1 输出信息是不同的 说明确实是开启了多线程在执行
下面着重说一下其使用优点 task.Start() 后调用的CreateTask 会新开线程执行,如果不执行 part_001 (Console.WriteLine("Result is1: {0}", task.Result);)主线和不会受阻而执行主代码块下面的代码,子方法CreateTask 也在执行,如果执行part_001 则主线程会等待 CreateTask
执行完再执行后续代码,Task很好的会我们做了等待和不等待的控制让用起来更加方便,以上整理如有不合理解释 望提出一起讨论亲爱的小伙伴们。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?