Using .NET TPL; is there any way to measure how the work is being spread among the cores?
===

I'm wondering, is there any reliable way of seeing (or measuring) how well my app's work is being distributed to the cores in a server?  The only (very unscientific) options that come to mind are:

 1. "eyeballing" the CPU graphs in the task manager
 2. having the app constantly write out `Thread.CurrentThread.ManagedThreadId` to the console as each piece of work is done

Surely there are better options?

**Background:** 
My app listens for incoming packets, does some in-memory work, and writes stuff to a database.
My target platform is a Windows Server machine with four cores.  The first version of my app was clearly using one core heavily, and the other three were mostly idle.  I deployed a second version using `Task.Factory.StartNew()` in an attempt to distribute the work among the other cores each time I receive a packet.  It now looks like ALL cores are busier than the single core was in my first app.