Not a subject expert I\'m trying to understand more of the async world available in .NET. Task.Run and ThreadPool.QueueUserWorkItem both allow dispatching work on a pool thread
One difference between ThreadPool.QueueUserWorkItem and Task.Run I recently realized is the way they handle exceptions.
If an unhanded exception occurs inside ThreadPool.QueueUserWorkItem and not handled by global exception handler, it will crash parent thread. On the other hand, unhanded exceptions from Task.Run thread will not get propagated until you await or Task.Wait.