I'd have to agree with most of what you wrote, although I still think you can get around most of the problems (except double-clicking) with a stern warning -- perhaps an interstitial page -- that provides an estimate of how long the process will take; those estimates may not be trivial to come up with, but I think the cost of creating the estimates needs to be compared to the cost of "waste."
Regarding double-clicking, the most effective solution I've seen to this is to generate a request ID embedded in the request page, so that when you accept the request, you compare the request ID to the available results, and return the result, if available. If not, you can wait until it is available. The first process doesn't have to be stopped, and the second would just be waiting for the first to complete; this only wastes a thread, but it may be cheaper than reengineering ns_conn. I really do get that there are times when it would be "nice" to halt processing that no one will listen to, but I think it will be more expensive to implement this feature than to engineer the UI to minimize the number of times that happens. But that's just my opinion.
