C#異步Async、Task、Await


參考http://www.cnblogs.com/jesse2013/p/async-and-await.html

事例:

static void Main(string[] args)
        {
            for (int i = 0; i < 4; i++)
            {
                TestAsync();
            }

            Console.ReadLine();
        }

        static async Task TestAsync()
        {
            Console.WriteLine("Test()開始, Thread Id: {0}\r\n", Thread.CurrentThread.ManagedThreadId);
            var name = GetNameAsync();   //我們這里沒有用 await,所以下面的代碼可以繼續執行
            // 但是如果上面是 await GetNameAsync(),下面的代碼就不會立即執行,輸出結果就不一樣了。            
            var res = await name;
            //
            Console.WriteLine("await GetName1: {0},得到結果進行其它操作", res );
            Console.WriteLine("Test()結束.\r\n"); 
        }

        static async Task<string> GetNameAsync()
        {
            // 這里還是主線程
            Console.WriteLine("GetName()開始, thread Id is: {0}", Thread.CurrentThread.ManagedThreadId);
            return await Task.Run(() =>
            {
                Thread.Sleep(1000);
                Console.WriteLine("'GetName' Thread Id: {0}", Thread.CurrentThread.ManagedThreadId);
                return "Jesse";
            });
        }

、、、、

static async Task Test(){
    Task<string> task = Task.Run(() =>{
        Console.WriteLine("另一個線程在運行!");  // 這句話只會被執行一次
        Thread.Sleep(2000);
        return "Hello World";
    });
 
    // 這里主線程會掛起等待,直到task執行完畢我們拿到返回結果
    var result = task.GetAwaiter().GetResult(); 
    // 這里不會掛起等待,因為task已經執行完了,我們可以直接拿到結果
    var result2 = await task;    
    Console.WriteLine(str);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM