public void Consume() { var time = 0; while (true) { if (_crackedPasswords.Count() != 0) { time = 0; var pass = _crackedPasswords.Dequeue(); var hashedPass = pass.HashedPass; Console.WriteLine("Cracked: " + pass); _mutex.WaitOne(); _passwordsToCrack[hashedPass] = true; if (_passwordsToCrack.All(p => p.Value == true)) { _mutex.ReleaseMutex(); ConsumptionFinished("All passwords cracked"); return; } _mutex.ReleaseMutex(); } else if (_passwordsToCrack.All(p => p.Value == true)) { ConsumptionFinished("All passwords cracked"); return; } else { Thread.Sleep(20); if (++time != 500) { continue; } ConsumptionFinished("No more passwords found for long time"); return; } } }