使用了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>
        /// 使用await操作符获取异步任务结果
        /// </summary>
        static void Main()
        {
            CurrentThreadInfo("主线程Main()的");
Task t1
= TaskMethod_TPL(); t1.Wait(); Task t2 = TaskMethod_Await(); t2.Wait(); Console.WriteLine("\n执行完成" + DateTime_Now_ToString()); Console.ReadLine(); } /// <summary> /// 启动一个任务 /// </summary> private static Task TaskMethod_TPL() { Task<string> task1 = GetCurrentThreadInfoAsync("task11");
Task task2
= task1.ContinueWith(t1 => { Console.WriteLine("返回task1任务的结果," + DateTime_Now_ToString()); Console.WriteLine(t1.Result); }, TaskContinuationOptions.NotOnFaulted);
Task task3
= task1.ContinueWith(t1 => Console.WriteLine("task1异常信息:" + t1.Exception.InnerException.Message), TaskContinuationOptions.OnlyOnFaulted); return Task.WhenAny(task2, task3); } /// <summary> /// 创建一个任务 /// </summary> private async static Task TaskMethod_Await() { try { string result = await GetCurrentThreadInfoAsync("taskAwait"); Console.WriteLine(result); } catch (Exception e) { Console.WriteLine("异常信息:" + e.Message); } } private async static Task<string> GetCurrentThreadInfoAsync(string name) { await Task.Delay(TimeSpan.FromMilliseconds(5000)); 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:           9
主线程Main()的是否使用线程池:    False
主线程Main()的是否后台线程:      False
主线程Main()的线程状态:         Running
主线程Main()的当前时间:         2016-08-29 20:43:51


返回task1任务的结果,2016-08-29 20:43:56

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


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


执行完成2016-08-29 20:44:01

*/

 

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