Thanks kindly. yes you are correct about the WaitAll() suggestion, WaitOne is better in this case.

But in regards to LINQ to SQL Query in the ProcessWorkItem (It is using a DataContext using the EF), is there a way to make it threading safe? Currently if I do not do this, it will throw an exception at some point stating that it tried to read data when the connection state is not open (understandably)

I guess I need to keep that synclock (lock in C#) in place around that query?