Sequential Task definition.
Inheritance: CompositeTask
Esempio n. 1
0
        /// <summary>
        /// Builds a set of tasks to perform the load.
        /// </summary>
        /// <returns>A sequence of tasks to execute.</returns>
        private static IEnumerable<ITask> BuildTasks()
        {
            List<ITask> tasks = new List<ITask>();

            var targetFactory = Program.connectionFactories["target"];

            if (Program.Options.FullLoad)
            {
                // Clean out the database.
                var cleanTask = new SequentialTask(
                    "Clean Target Database",
                    new ExecuteSqlTask("Truncate Facts", targetFactory, SqlQueries.TruncateFactsSql),
                    new ExecuteSqlTask("Delete dimension data", targetFactory, SqlQueries.DeleteDimensionData));

                tasks.Add(cleanTask);
            }

            var dimensionTasks = new List<ITask>();

            if (Program.Options.FullLoad)
            {
                var currencyLoader = new CurrencyLoader(targetFactory);
                dimensionTasks.Add(currencyLoader.Build());

                var dateLoader = new DateLoader(targetFactory);
                dimensionTasks.Add(dateLoader.Build());

                var productLoader = new ProductLoader(targetFactory);
                Program.Disposables.Add(productLoader);                    
                dimensionTasks.Add(productLoader.Build());
            }

            tasks.Add(new ParallelTask("Load Dimensions", dimensionTasks));

            return tasks;
        }
Esempio n. 2
0
        /// <summary>
        /// Executes the loader task sequence.
        /// </summary>
        /// <remarks>
        /// Note: This executes the supplied list in sequence. If parallel 
        /// execution is needed then create ParallelTasks in this list.
        /// </remarks>
        /// <param name="tasks">A sequence of tasks to execute.</param>
        /// <returns>A task representing the completion of this function.</returns>
        private static async Task ExecuteAsync(IEnumerable<ITask> tasks)
        {
            var mainTask = new SequentialTask("Main", tasks);

            var context = new TaskContext(Program.CancellationTokenSource);

            await mainTask.VerifyAsync(context);

            await mainTask.ExecuteAsync(context);
        }