public void Execute(Action trigger) { if (Interlocked.Increment(ref failureCount) > threshold) { if (Interlocked.Exchange(ref firedTimes, 1) == 0) { trigger(); } } }