static void OnTimer(object sender, EventArgs e) { while (true) { if (!ready.Any()) { break; } foreach (var timer in ready.ToList()) { if (timer.dependencies.Any(dependency => dependency.Started)) { continue; } timer.Stop(); timer.action(); } } }