.Net中Task使用来提高代码执行效率

本文介绍如何利用.NET中的Task来简化多线程编程,通过示例代码展示了Task的基本用法及其在并发编程中的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

技术不断更新迭代,更高效的执行效率越来越被重视,所以对Task的使用进行了简单使用做了整理与大家分享。

.Net 中有了Task后使多线程编程更简单使用和操作,下面粘上代码进行简单说明:

        /// <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));
        }

  

以上方法是为实例准备的方法调用 主方法调用

 

            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很好的会我们做了等待和不等待的控制让用起来更加方便,以上整理如有不合理解释 望提出一起讨论亲爱的小伙伴们。

转载于:https://www.cnblogs.com/liyanbofly/p/7879119.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值