public static void NoTimeoutAcquire(Action enterWaiting, Func <int, bool> getResult, Action convertWaitingToAcquired, Action exitWaiting)
            {
                try
                {
                    enterWaiting();

                    bool result = false;

                    int timeout = initialTimeout;

                    while (!result)
                    {
                        if (timeout > initialTimeout || timeout == Timeout.Infinite)
                        {
                            DeadlockMonitor.DetectDeadlocksInternal(Thread.CurrentThread);
                        }

                        result = getResult(timeout);

                        timeout = timeout == initialTimeout ? secondTimeout : Timeout.Infinite;
                    }

                    convertWaitingToAcquired();
                }
                finally
                {
                    exitWaiting();
                }
            }