异步编程 async await
async await
使用 async await 关键字可以很轻松的实现异步编程,我们子需要将方法加上 async 关键字,方法内的异步操作使用 await 等待异步操作完成后再执行后续操作。
class Program { static void Main(string[] args) { Console.WriteLine(DateTime.Now + " start"); AsyncAwaitTest(); Console.WriteLine(DateTime.Now + " end"); Console.ReadKey(); } public static async void AsyncAwaitTest() { Console.WriteLine("test start"); await Task.Delay(5000); Console.WriteLine("test end"); } }
AsyncAwaitTest 方法使用 async 关键字,使用await关键字等待5秒后打印"test end"。在 Main 方法里面调用 AsyncAwaitTest 方法。
使用 await 在任务完成前将控制让步于其调用方,可让应用程序和服务执行有用工作。 任务完成后代码无需依靠回调或事件便可继续执行。 语言和任务 API 集成会为你完成此操作。
使用await 的方法必须使用 async 关键字,如果我们 Main 方法里面想等待 AsyncAwaitTest 则 Main 方法需要加上 async 并返回 Task。
Thread.Sleep会让主进程挂起,所有的线程都暂停工作,等待Thread.Sleep完成后再执行。
async await 相当于建立起一个线程,Task.Delay(100)是让此线程等待100ms后继续执行,但不影响主进程和其他线程运行.
Task.Delay()和Thread.Sleep()最大的区别是Task.Delay()旨在异步运行,在同步代码中使用Task.Delay()是没有意义的;在异步代码中使用Thread.Sleep()是一个非常糟糕的主意。通常使用await关键字调用Task.Delay()。