http://www.dribin.org/dave/blog/archives/2009/05/05/concurrent_operations/