async方法中 使用await 和 不使用await 示例
using System; using System.Text; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; namespace Test { class Program { /// <summary> /// 异步使用线程池新线程执行 /// </summary> private static async Task<string> GetAwaitString(string str) { await Task.Delay(3000); Console.WriteLine("GetAwaitString:线程Id:【{0}】是否后台线程:【{1}】是否使用线程池:【{2}】当前时间:【{3}】", Environment.CurrentManagedThreadId.ToString(), Thread.CurrentThread.IsBackground, Thread.CurrentThread.IsThreadPoolThread, DateTime.Now.ToString()); return String.Format("{0}-{1}", str, Environment.CurrentManagedThreadId.ToString()); } private static string GetString(string str) { var task = GetAwaitString(str); Console.WriteLine("GetString:线程Id:【{0}】是否后台线程:【{1}】是否使用线程池:【{2}】当前时间:【{3}】", Environment.CurrentManagedThreadId.ToString(), Thread.CurrentThread.IsBackground, Thread.CurrentThread.IsThreadPoolThread, DateTime.Now.ToString()); return task.Result; } static void Main() { Console.WriteLine("Main:线程Id:【{0}】是否后台线程:【{1}】是否使用线程池:【{2}】当前时间:【{3}】", Environment.CurrentManagedThreadId.ToString(), Thread.CurrentThread.IsBackground, Thread.CurrentThread.IsThreadPoolThread, DateTime.Now.ToString()); string str = GetString("abc"); Console.WriteLine("结果:{0},{1}", str, DateTime.Now.ToString()); Console.WriteLine("执行完成:线程Id:【{0}】是否后台线程:【{1}】是否使用线程池:【{2}】当前时间:【{3}】", Environment.CurrentManagedThreadId.ToString(), Thread.CurrentThread.IsBackground, Thread.CurrentThread.IsThreadPoolThread, DateTime.Now.ToString()); Console.ReadLine(); } } }
使用 await Task.Delay(3000);
/* * await Task.Delay(3000); Main:线程Id:【9】是否后台线程:【False】是否使用线程池:【False】当前时间:【2016/9/12 14:34:11】 GetString:线程Id:【9】是否后台线程:【False】是否使用线程池:【False】当前时间:【2016/9/12 14:34:11】 GetAwaitString:线程Id:【6】是否后台线程:【True】是否使用线程池:【True】当前时间:【2016/9/12 14:34:14】 结果:abc-6,2016/9/12 14:34:14 执行完成:线程Id:【9】是否后台线程:【False】是否使用线程池:【False】当前时间:【2016/9/12 14:34:14】 */
( 14 - 11 = 3 ) await 使用了新线程和线程池。
不使用 //await Task.Delay(3000);
/* * //await Task.Delay(3000); Main:线程Id:【8】是否后台线程:【False】是否使用线程池:【False】当前时间:【2016/9/12 14:35:02】 GetAwaitString:线程Id:【8】是否后台线程:【False】是否使用线程池:【False】当前时间:【2016/9/12 14:35:02】 GetString:线程Id:【8】是否后台线程:【False】是否使用线程池:【False】当前时间:【2016/9/12 14:35:02】 结果:abc-8,2016/9/12 14:35:02 执行完成:线程Id:【8】是否后台线程:【False】是否使用线程池:【False】当前时间:【2016/9/12 14:35:02】 */
同步执行

浙公网安备 33010602011771号