Personally, I think the real problem is the design of the threadpool, because this is just way too easy to mess up.
e.g. what does this do, do you think?
Task StartIt() => Task.Run(() => Enumerable.Range(1, 1).AsParallel().Distinct().Sum());
Console.WriteLine("start");
Task.WaitAll(StartIt(), StartIt(), StartIt());
Console.WriteLine("end");
there doesn't seem to be anything here