使用了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 */

浙公网安备 33010602011771号