Brnkly.Raven.DocumentStoreFactory.UpdateInnerStore C# (CSharp) Метод

UpdateInnerStore() приватный Метод

private UpdateInnerStore ( Brnkly.Raven.DocumentStoreWrapper wrapper, Action innerStoreInitializer ) : void
wrapper Brnkly.Raven.DocumentStoreWrapper
innerStoreInitializer Action
Результат void
        private void UpdateInnerStore(
            DocumentStoreWrapper wrapper,
            Action<DocumentStore> innerStoreInitializer)
        {
            DocumentStore existingInnerStore = wrapper.InnerStore;
            DocumentStore newInnerStore = null;
            bool newInnerStoreApplied = false;

            try
            {
                var storeInstance = GetClosestInstanceOrDefault(wrapper);

                if (wrapper.IsInitialized &&
                    wrapper.InnerStore.Url.Equals(storeInstance.Url.ToString(), StringComparison.OrdinalIgnoreCase) &&
                    !wrapper.InnerStore.WasDisposed)
                {
                    logger.Debug("{0} {1} store Url did not change. It remains {2}.", wrapper.AccessMode, wrapper.Name, wrapper.InnerStore.Url);
                    return;
                }

                newInnerStore = this.CreateDocumentStore(storeInstance, wrapper.AccessMode);

                innerStoreInitializer(newInnerStore);

                wrapper.InnerStore = newInnerStore;
                wrapper.IsInitialized = true;
                newInnerStoreApplied = true;

                logger.Info("{0} {1} store Url set to {2}.", wrapper.AccessMode, wrapper.Name, newInnerStore.Url);
            }
            catch (Exception exception)
            {
                LogException(exception, wrapper, newInnerStore);

                if (exception.IsFatal())
                {
                    throw;
                }
            }
            finally
            {
                if (newInnerStoreApplied)
                {
                    if (existingInnerStore != null)
                    {
                        // Wait for current operations to complete.
                        // This is on a background thread.
                        Thread.Sleep(5000);
                        logger.Debug("Disposing store for {0}", existingInnerStore.Url);
                        existingInnerStore.Dispose();
                    }
                }
                else
                {
                    if (newInnerStore != null)
                    {
                        logger.Debug("Disposing store for {0}", newInnerStore.Url);
                        newInnerStore.Dispose();
                    }
                }
            }
        }