A year ago, Larry Osterman wrote a series on programming with concurrency, that I took the time to read the other day. It’s in fifteen parts, but it’s definitely worth reading! Even if you’re quite experienced with concurrency and multithreading, you’ll definitely find things you hadn’t thought about. For example this.
The links to the various parts in the series are in the "Wrapping it all up" post (the first link in this post).