理解异步应用程序事件对于建立好的应用程序不是必要的,不过它是一个在某些情况下非常有用的高级功能。ASP.NET代码是在ASP.NET工作进程中,而不是在IIS进程中执行的。在这个工作进程中,要使用线程来执行代码。线程是一种资源,ASP.NET可以使用的线程的数目是有限的——否则,处理程序将把全部时间都用来切换上下文(也就是说,在处理程序中切换执行的线程),而不是执行用户代码。
ASP.NET创建管理了一个线程库,它用来按照要求来在应用程序的整个运行过程中增加和减少线程的数目。与ASP不同的是,ASP使用了固定数目的线程。在某些情况下,应用程序代码(例如网络I/O)有可能会在ASP.NET进程中阻碍线程。这是由于ASP.NET线程必须等待(因为被阻碍了),直到这个很慢的操作结束。
如果线程被阻碍了,那么它就不能用来处理请求了,这就会导致请求的排队以及应用程序性能的下降。ASP.NET开发小组考虑到这个问题,并对于异步事件和同步事件都提供了支持。在global.asax中使用这些异步事件的唯一原因就是在应用程序代码中(在事件中)通过网络(其中网络类支持I/O Completion端口)执行一些操作,如web服务代理。