public void ShutDown()
{
var toJoin = new Queue<Thread>();
for (int i = workers.Count - 1; i >= 0; i--)
{
lock (workers)
{
toJoin.Enqueue(workers[i].Thread);
workers[i].EnqueueTask(null, null);
}
}
while (toJoin.Count > 0)
{
toJoin.Dequeue().Join();
}
}