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 不行
1 private static async Task Return() 2 { 3 //主線程執行 4 Console.WriteLine($"NoReturn Sleep before await,ThreadId={Thread.CurrentThread.ManagedThreadId}"); 5 TaskFactory taskFactory = new TaskFactory(); 6 Task task = taskFactory.StartNew(() => 7 { 8 Console.WriteLine($"NoReturn Sleep before,ThreadId={Thread.CurrentThread.ManagedThreadId}"); 9 Thread.Sleep(3000); 10 Console.WriteLine($"NoReturn Sleep after,ThreadId={Thread.CurrentThread.ManagedThreadId}"); 11 }); 12 //主線程到這里就返回了,執行主線程任務 13 await task; 14 //這個回調的線程是不確定的:可能是主線程 可能是子線程 也可能是其他線程 15 Console.WriteLine($"NoReturn Sleep after await,ThreadId={Thread.CurrentThread.ManagedThreadId}"); 16 }