1. 程式人生 > >C#異步中的Task,async,await

C#異步中的Task,async,await

string con get 結果 brush 異步回調 pre result ring

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("我是主線程,線程ID:{0}", Thread.CurrentThread.ManagedThreadId);
            TestAsync();
            Console.ReadLine();
        }

        static async void  TestAsync()
        {
            Console.WriteLine("調用GetReturnResult()之前,線程ID:{0}。當前時間:{1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));
            var name = GetReturnResult();
            Console.WriteLine("調用GetReturnResult()之後,線程ID:{0}。當前時間:{1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));
           
            //異步回調內容
            //在await以及之後的代碼都會阻塞
            Console.WriteLine("得到GetReturnResult()方法的結果:{0}。當前時間:{1}", await name, DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));
            Console.WriteLine("await之後的內容。當前時間:{0}",  DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));
            //異步回調內容
        }

        static async Task<string> GetReturnResult()
        {
            Console.WriteLine("執行Task.Run之前, 線程ID:{0}", Thread.CurrentThread.ManagedThreadId);
            return await Task.Run(() =>
            {
                Thread.Sleep(5000);
                Console.WriteLine("GetReturnResult()方法裏面線程ID: {0}", Thread.CurrentThread.ManagedThreadId);
                return "我是返回值";
            });
        }
 
    }

  

C#異步中的Task,async,await