示例#1
0
        /// <summary>
        /// Asynchronous method for running a batch index creation job against a database
        /// </summary>
        /// <param name="progressCallBack">callback method for reporting on the progress of the job</param>
        /// <returns>A task which returns a completed IndexBuildReport covering all of the indexes found in the assembly</returns>
        public Task<IndexBuildReport> RunAsync(IndexBuildCommand buildInstructions, Action<IndexBuildResult> progressCallBack)
        {
            //Load our indexes
            var indexes = GetIndexesFromLoadedAssemblies();
            var tasks = new List<Task<IndexBuildResult>>();

            foreach (var index in indexes)
            {
                var indexInstance = (AbstractIndexCreationTask)Activator.CreateInstance(index);
                tasks.Add(BuildIndexAsync(indexInstance, progressCallBack));
            }

            if (buildInstructions.DropInactiveVersionedIndexes)
            {
                var versionedIndexes = GetVersionedIndexesFromLoadedAssemblies();
                foreach (var indexType in versionedIndexes)
                {
                    var index = (AbstractIndexCreationTask)Activator.CreateInstance(indexType);
                    var nonVersionedIndexName = ((IVersionedIndex)index).GetIndexNameWithoutVersion();
                    var inactiveIndexes = _documentStore.DatabaseCommands
                                            .GetStatistics()
                                            .Indexes
                                            .Where(x => x.Name.StartsWith(nonVersionedIndexName) &&
                                                        x.Name.Equals(index.IndexName) == false
                                            ).ToList();

                    foreach (var indexToDrop in inactiveIndexes)
                    {
                        tasks.Add(DropIndexAsync(indexToDrop.Name, progressCallBack));
                    }
                }
            }

            return Task.Factory.ContinueWhenAll(tasks.ToArray(), cont =>
            {
                var buildReport = new IndexBuildReport()
                {
                    BuildResults = tasks.Select(x => x.Result).ToList()
                };

                return buildReport;
            });
        }
示例#2
0
        /// <summary>
        /// Asynchronous method for running a batch index creation job against a database
        /// </summary>
        /// <param name="progressCallBack">callback method for reporting on the progress of the job</param>
        /// <returns>A task which returns a completed IndexBuildReport covering all of the indexes found in the assembly</returns>
        public Task<IndexBuildReport> RunAsync(Action<IndexBuildResult> progressCallBack)
        {
            //Load our indexes
            var indexes = GetIndexesFromLoadedAssemblies();
            var tasks = new List<Task<IndexBuildResult>>();

            foreach (var index in indexes)
            {
                var indexInstance = (AbstractIndexCreationTask)Activator.CreateInstance(index);
                tasks.Add(BuildIndexAsync(indexInstance, progressCallBack));
            }

            return Task.Factory.ContinueWhenAll(tasks.ToArray(), cont =>
            {
                var buildReport = new IndexBuildReport()
                {
                    BuildResults = tasks.Select(x => x.Result).ToList()
                };

                return buildReport;
            });
        }