The first is an active app that requires your attention and input. This type uses the screen for information display and input. The iPhone screen is only big enough for one app at a time for the most part, so only one app at a time that requires your attention and input makes sense.
The second is an asynchronous app such as IM. These apps need to check in with a server for status changes and alert the user when they occur. Background notifications handle these apps quite well.
The third is streaming audio apps (that are not named iPod). These apps can only run as the active app at this time.
A fourth category are apps that access information from the phone (the GPS for example) at regular intervals. These are different than asynchronous apps because they get their information from the iPhone itself rather than from a network host or other entity. These apps have no background capability at this time (though it seems like a task scheduler of some kind could address them).
The primary concern of most pundits seems to be the first type, active apps. What a lot of people must not realize is that most iPhone apps save their state when you exit and resume when you re-enter at the same point, so quitting and restarting is a lot like just task switching.
Fast switching between tasks is normally rapid and straightforward, but there are cases when the apps you're switching between are on different pages that it can get cumbersome.
Suppose the next iPhone OS update included the ability to quickly show the most recent apps that have been run?
The search screen could be divided into "Search" and "Recents" modes so that double clicking the home button (or hitting home from the 1st home screen or swiping left from same) would bring up the list.
This would provide a more seamless switching experience for most cases.