/// <summary> /// Enable deadlock detection with a specific deadlock detection mode. /// </summary> /// <param name="detectionMode">Deadlock detection mode.</param> public static IDisposable DeadlockDetection(DeadlockDetectionMode detectionMode) { // Don't do anything if deadlock detection is disabled if (detectionMode == DeadlockDetectionMode.Disabled) { return(null); } // Use deadlock detection return(new Enable(detectionMode)); }
private Enable(DeadlockDetectionMode detectionMode) { _detectionMode = detectionMode; // Determine the current synchronization context and abort if we // only want to find actual deadlocks and there is no synchronization context var currentSynchronizationContext = SynchronizationContext.Current; if (currentSynchronizationContext == null && detectionMode == DeadlockDetectionMode.OnlyActualDeadlocks) { return; } // Install our deadlock detection synchronization context _deadlockDetectionSynchronizationContext = new DeadlockDetectionSynchronizationContext(currentSynchronizationContext); SynchronizationContext.SetSynchronizationContext(_deadlockDetectionSynchronizationContext); }