示例#1
0
        /// <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));
        }
示例#2
0
        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);
        }