Task.FromResult<TResult> 与 Task.Run<TResult> 线程信息

using System;
using System.Threading;
using System.Threading.Tasks;

namespace Test
{
    class Program
    {
        static void Main()
        {
            ThreadInfo("主线程");

            var task1 = TaskMethod_FromResult();
            var result1 = task1.Result;
            Console.WriteLine("FromResult结果:" + result1);


            var task2 = TaskMethod_Run();
            var result2 = task2.Result;
            Console.WriteLine("Run结果:" + result2);


            Console.WriteLine("\n执行完毕");
            Console.ReadLine();
        }

        private static Task<int> TaskMethod_FromResult()
        {
            ThreadInfo("TaskMethod_FromResult");
            return Task.FromResult<int>(IntResult());
        }

        private static Task<int> TaskMethod_Run()
        {
            ThreadInfo("TaskMethod_Run_外");
            return Task.Run(() =>
            {
                //使用后台线程池
                ThreadInfo("Task-Run_内");
                return IntResult();
            });
        }

        private static int IntResult()
        {
            ThreadInfo("IntResult");
            return 75;
        }

        private static void ThreadInfo(string funName)
        {
            Console.WriteLine("{3}:线程Id:【{0}】是否后台线程:【{1}】是否使用线程池:【{2}】\n",
              Environment.CurrentManagedThreadId.ToString(),
              Thread.CurrentThread.IsBackground,
              Thread.CurrentThread.IsThreadPoolThread,
              funName);
        }
    }
}

 

打印运行结果:

/*
主线程:线程Id:【8】是否后台线程:【False】是否使用线程池:【False】

TaskMethod_FromResult:线程Id:【8】是否后台线程:【False】是否使用线程池:【False】
IntResult:线程Id:【8】是否后台线程:【False】是否使用线程池:【False】
FromResult结果:75
TaskMethod_Run_外:线程Id:【8】是否后台线程:【False】是否使用线程池:【False】 Task-Run_内:线程Id:【9】是否后台线程:【True】是否使用线程池:【TrueIntResult:线程Id:【9】是否后台线程:【True】是否使用线程池:【True】 Run结果:75 执行完毕
*/

 

posted @ 2016-09-27 00:22  茗::流  阅读(2136)  评论(1)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。