public void Invoke(Exception error) { try { if (ExceptionEqualityComparer.Equals(error, Interlocked.Exchange(ref lastError, error))) { return; } callback?.Invoke(error); } catch { // ignored } }
public void Invoke(Exception error) { try { var newLastError = Tuple.Create(error, DateTimeOffset.UtcNow); var oldLastError = Interlocked.Exchange(ref lastError, newLastError); if (oldLastError != null && ExceptionEqualityComparer.Equals(error, oldLastError.Item1) && newLastError.Item2 - oldLastError.Item2 < cooldown) { return; } callback?.Invoke(error); } catch { // ignored } }