public void Run() { while (!isDisposed) { IMyTask task = data[Thread.CurrentThread].Dequeue(); if (task == null) { int indexStolenThread = random.Next(0, data.Count); Thread stolenThread = data.ElementAt(indexStolenThread).Key; if (!data.ElementAt(indexStolenThread).Value.IsEmpty()) { IMyTask stolenTask = data.ElementAt(indexStolenThread).Value.Dequeue(); if (stolenTask != null) { data[Thread.CurrentThread].Enqueue(stolenTask); Thread.Sleep(10); } } } else { task.Execute(); } } }