C# Job Queue Implementations in Depth - Part 1