Ways of creating multi-threaded applications in .NET Part 3. TPL and PLINQ