.NET實現異步編程async和await
await和async是.NET Framework4.5框架、C#5.0語法裡面出現的,await和async是語法糖。
註意:
1、async出現在方法的聲明裡面,任何一個方法都可以增加async。
2、await放在Task前面,async和await是成對出現的,隻有async是沒有意義的,隻有await是報錯的。
隻有async是沒有意義的。
隻有await是報錯的。
3、await 隻能放在task前面,不推薦void返回值,使用Task來代替。Task和Task<T>能夠使用await, Task.WhenAny, Task.WhenAll等方式組合使用。Async Void 不行
private static async Task Return() { //主線程執行 Console.WriteLine($"NoReturn Sleep before await,ThreadId={Thread.CurrentThread.ManagedThreadId}"); TaskFactory taskFactory = new TaskFactory(); Task task = taskFactory.StartNew(() => { Console.WriteLine($"NoReturn Sleep before,ThreadId={Thread.CurrentThread.ManagedThreadId}"); Thread.Sleep(3000); Console.WriteLine($"NoReturn Sleep after,ThreadId={Thread.CurrentThread.ManagedThreadId}"); }); //主線程到這裡就返回瞭,執行主線程任務 await task; //這個回調的線程是不確定的:可能是主線程 可能是子線程 也可能是其他線程 Console.WriteLine($"NoReturn Sleep after await,ThreadId={Thread.CurrentThread.ManagedThreadId}"); }
到此這篇關於.NET實現異步編程async和await的文章就介紹到這瞭。希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- c# Task.Wait()與awaiat Task異常處理的區別說明
- C# 異步多線程入門到精通之Thread篇
- c# Async streams的使用解析
- C#中async和await的深入分析
- C#中的Task.Delay()和Thread.Sleep()區別(代碼案例)