在lambda表达式中使用await操作符

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

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


        /// <summary>
        /// 在lambda表达式中使用await操作符
        /// </summary>
        static void Main()
        {
            CurrentThreadInfo("主线程Main()的");

            Task taskAwait = TaskMethod_Await();
            taskAwait.Wait();


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

        private async static Task TaskMethod_Await()
        {
            Func<string, Task<string>> func = async name =>
            {
                await Task.Delay(TimeSpan.FromMilliseconds(5000));

                return GetCurrentThreadInfo(name);
            };

            string result = await func("taskAwait");
            Console.WriteLine(result);
        }

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

 

打印运行结果:

/*

主线程Main()的线程Id:           10
主线程Main()的是否使用线程池:    False
主线程Main()的是否后台线程:      False
主线程Main()的线程状态:         Running
主线程Main()的当前时间:         2016-08-29 20:54:51


taskAwait线程Id:                12
taskAwait是否使用线程池:         True
taskAwait是否后台线程:           True
taskAwait线程状态:              Background
taskAwait当前时间:              2016-08-29 20:54:56


执行完成2016-08-29 20:54:56

*/

 

posted @ 2016-08-30 14:55  茗::流  阅读(1055)  评论(0)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。