异步方法介绍
大多数编程语言都支持多进程、多线程编程,在Win窗体应用开发中,使用多线程开发可以大大提高程序性能,避免出现卡顿,C#中定义多线程略微有一些繁琐。在某个情况下,只是为某个简单方法定义一个线程有些浪费,这时就可以使用C#中的异步方法,让程序运行到这里时,自动定义一个线程去执行异步方法,程序员不需要为此多花费精力。异步方法在完成其工作之前即返回到调用该方法的地方,主进程可以继续执行,不需要等待异步方法执行完成。
定义一个异步方法
在C#中自定义异步方法,最简单的情况就是使用Task.Run()配合lambda表达式。定义异步方法时,其方法头需要用async标识出,并且在方法体中包含一个或多个await表达式,async告诉编译器该方法是异步方法,await表达式告诉编译器该行为异步完成的任务,异步方法的返回值必为三种返回类型:void、Task和Task
1 | async void PrintDelayAsync(string str) |
上述代码定义了名为PrintDelayAsync(string str)的方法,方法体中包含await表达式,调用了Task.Run()方法,并使用lambda表达式作为Task.Run()的参数,调用该异步方法,线程会停止3秒,然后在控制台输出一段文字。
1 | static void Main(string[] args) |
上述主程序将pp对象声明为Program类并初始化,进而可以通过调用Program中的异步方法,不会阻塞主程序执行。执行结果如图所示:
总结
当某个方法存在阻塞程序执行的可能时,可以新定义一个线程或者使用异步方法;由于线程的创建和终值会消耗许多系统资源,因此在处理简单的耗时任务时,可以使用异步方法代替;异步方法体执行完成前就可以返回至调用方法,当然两者各有各的优势,应分情况使用。