Is This a Sufficient Demonstration of the Effects of Exception Handling
The while loop you are using is impacting performance.  Sleep that check a bit beforehand to give your scenarios some time to think.  

do { Thread.Sleep(3000); } while (!tasks.All(t =&gt; t.IsCompleted));


You may want to suggest some best practices reading to your team, throwing an exception should be reserved for an exceptional circumstance.  Use of the throw for rethrowing an exception is correct to keep the stack trace information complete, but again, should be seldom and when they do finally bubble up to the top, the exception information should be captured in a way that they are not just ignored.

http://www.codeproject.com/KB/architecture/exceptionbestpractices.aspx

https://stackoverflow.com/questions/409563/best-practices-for-exception-management-in-java-or-c

http://www.codethinked.com/how-do-you-deal-with-exceptions