连续任务2

using System;
using System.Text;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace Test
{
    class Program
    {
        public static string DateTime_Now_ToString()
        {
            return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        }


        /// <summary>
        /// 连续任务(对任务进行排序)
        /// </summary>
        static void Main()
        {
            Console.WriteLine("当前时间:{0}\n", DateTime_Now_ToString());
            Console.WriteLine(GetCurrentThreadInfo("主线程"));
            Thread.Sleep(TimeSpan.FromMilliseconds(1000));


            //前置任务
            Task<int> task1 = new Task<int>(() =>
            {
                Console.WriteLine("task1任务开始," + DateTime.Now.ToString());

                Thread.Sleep(TimeSpan.FromMilliseconds(5000));

                int threadId = Thread.CurrentThread.ManagedThreadId;
                Console.WriteLine("task11内的线程Id:{0},{1}", threadId.ToString(), DateTime.Now.ToString());
                CurrentThreadInfo("task11");

                return threadId;
            });

            Task<int> task2 = new Task<int>(() =>
            {
                Console.WriteLine("task2任务开始," + DateTime.Now.ToString());

                Thread.Sleep(TimeSpan.FromMilliseconds(2000));

                int threadId = Thread.CurrentThread.ManagedThreadId;
                Console.WriteLine("task22内的线程Id:{0},{1}", threadId.ToString(), DateTime.Now.ToString());
                CurrentThreadInfo("task22");

                return threadId;
            });


            //两个前置任务(task1,task2)的后续任务
            Task totalTask = Task.Factory.ContinueWhenAll(new Task<int>[] { task1, task2 }, (allTask =>
            {
                Console.WriteLine("totalTask任务开始," + DateTime.Now.ToString());
                Thread.Sleep(TimeSpan.FromMilliseconds(3000));

                int threadId = Thread.CurrentThread.ManagedThreadId;
                Console.WriteLine("totalTask内的线程Id:{0},{1}", threadId.ToString(), DateTime.Now.ToString());
                CurrentThreadInfo("totalTask");

                Thread.Sleep(TimeSpan.FromMilliseconds(2000));

                Console.WriteLine("任务结果1:【{0}】,任务结果2:【{1}】,{2}", allTask[0].Result, allTask[1].Result, DateTime.Now.ToString());
            }));

            task1.Start();
            task2.Start();
            Task.WaitAll(task1, task2);

            totalTask.Wait();


            Console.WriteLine("\n执行完成" + DateTime_Now_ToString());
            Console.ReadLine();
        }

        private static string GetCurrentThreadInfo(string name)
        {
            StringBuilder builder = new StringBuilder();
            builder.AppendLine("");
            builder.AppendLine(String.Format("{0}线程Id:\t\t{1}", name, Thread.CurrentThread.ManagedThreadId));
            builder.AppendLine(String.Format("{0}是否使用线程池:\t{1}", name, Thread.CurrentThread.IsThreadPoolThread));
            builder.AppendLine(String.Format("{0}是否后台线程:\t{1}", name, Thread.CurrentThread.IsBackground));
            builder.AppendLine(String.Format("{0}线程状态:\t\t{1}", name, Thread.CurrentThread.ThreadState.ToString()));
            builder.AppendLine(String.Format("{0}当前时间:\t\t{1}", name, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
            builder.AppendLine("");

            return builder.ToString();
        }

        /// <summary>
        /// 当前线程信息
        /// </summary>
        private static void CurrentThreadInfo(string name)
        {
            StringBuilder builder = new StringBuilder();
            builder.AppendLine("");
            builder.AppendLine(String.Format("{0}线程Id:\t\t{1}", name, Thread.CurrentThread.ManagedThreadId));
            builder.AppendLine(String.Format("{0}是否使用线程池:\t{1}", name, Thread.CurrentThread.IsThreadPoolThread));
            builder.AppendLine(String.Format("{0}是否后台线程:\t{1}", name, Thread.CurrentThread.IsBackground));
            builder.AppendLine(String.Format("{0}线程状态:\t\t{1}", name, Thread.CurrentThread.ThreadState.ToString()));
            builder.AppendLine(String.Format("{0}当前时间:\t\t{1}", name, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
            builder.AppendLine("");

            Console.WriteLine(builder.ToString());
        }
    }
}

 

打印运行结果:

/*
当前时间:2016-09-01 10:56:51


主线程线程Id:         9
主线程是否使用线程池:  False
主线程是否后台线程:    False
主线程线程状态:       Running
主线程当前时间:       2016-09-01 10:56:51


task1任务开始,2016/9/1 10:56:52
task2任务开始,2016/9/1 10:56:52
task22内的线程Id:11,2016/9/1 10:56:54

task22线程Id:           11
task22是否使用线程池:    True
task22是否后台线程:      True
task22线程状态:         Background
task22当前时间:         2016-09-01 10:56:54


task11内的线程Id:10,2016/9/1 10:56:57

task11线程Id:           10
task11是否使用线程池:    True
task11是否后台线程:      True
task11线程状态:         Background
task11当前时间:         2016-09-01 10:56:57


totalTask任务开始,2016/9/1 10:56:57
totalTask内的线程Id:13,2016/9/1 10:57:00

totalTask线程Id:                13
totalTask是否使用线程池:         True
totalTask是否后台线程:           True
totalTask线程状态:              Background
totalTask当前时间:              2016-09-01 10:57:00


任务结果1:【10】,任务结果2:【11】,2016/9/1 10:57:02

执行完成2016-09-01 10:57:02
 
*/

 

posted @ 2016-09-06 12:47  茗::流  阅读(94)  评论(0)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。