I had a developer tell me recently that you should ALWAYS do database calls asynchronously. (Either using ThreadPool.QueueUserWorkItem or IAsyncResult and delegates)
His justification was this: IIS only has 24 (or so) threads that it can use for requests. When a user makes a request they get one of those threads. However, when you use asynchronous methods, you access Windows threads outside of IIS's scope. He said that when you use asynchronous methods this way, you are freeing up the initial thread to other users' requests, and transferring it over to a Windows thread (for that Thread's lifetime).
What do you think? Should all db calls be asynchronous?