I've been using the Concurrency Visualizer tool in Visual Studio to get an understanding of the threading in a WPF project I'm working on. The application isn't heavily multi-threaded, all multi-threading is just to avoid blocking the UI Thread. When I ran the Concurrency Visualizer I was very surprised to see approximately 50+ threads! To make things more confusing, almost all of those 50+ threads, spent their entire time in "Synchronization", which is "blocked" as far as I understand.
As an experiment I created a new blank WPF Application project, and ran it with the Concurrency Visualizer, again to my surprise, an application that I expected to have a single main thread, and maybe one or two more for garbage collection or other CLR stuff, turns out to have 10 threads!

So my questions are:
- Why are there so many threads in a very simple application?
- Generally speaking what are the functions of these threads?
- Why are they spending almost all their time "Synchronization"?
- Any recommendations for a book/website that covers this topic?