从目的上来说,二者都是一样的;从代码上来说,简单的异步和多线程中,异步代码要复杂得多;但是本文从原理上来说。
异步调用是线程池(System.Threading.ThreadPool)中执行
线程池有什么优点呢?我们看多线程先,每创建一个子线程,就需要创建、销毁工作,这些工作浪费了时间,当子线程多的时候,这种浪费现象就很严重。
线程池的出现就解决了这个问题,他事先就创建好了线程,放在那里,然后谁要用就来用,用完了也不销毁,而是等到应用程序退出的时候才销毁,可以看出这节约了创建、销毁线程的时间。
怎么样,和我们的数据库连接池(可在控制面板->管理工具->数据源中找到)是不是类似?顺便说一句,ASP 中把数据库连接放入 Application 中实在没有必要,Windows 已经配置好了常用数据库的连接池的嘛,自动生效的。
不过
托管线程池中的线程都是后台线程;而多线程创建的线程可以是后台线程,也可以是前台线程(默认是前台线程)。