예제 #1
0
        private static void RunInternal <TTask, TConfig>(ITaskController controller, TaskConfigBase <TTask, TConfig> config)
            where TTask : TaskBase <TTask, TConfig>, new()
            where TConfig : TaskConfigBase <TTask, TConfig>, new()
        {
            try
            {
                var configStr = Phase.Run("Serialize config", () => JsonConvert.SerializeObject(config, Formatting.Indented));
                config = Phase.Run("Clone config for run", () => JsonConvert.DeserializeObject <TConfig>(configStr));

                var l = controller.Logger;

                using (l.Context("Config:"))
                    controller.Logger.LogLine(configStr);

                DoRun(controller, config);
                controller.Logger.LogLine("-- Done -- ");
            }
            catch (CancelTaskException)
            {
                controller.Logger.LogLine("Task was canceled at the user's request");
            }
            catch (Exception e)
            {
                controller.Logger.LogException(e);
                throw;
            }
        }
예제 #2
0
        private static void DoRun <TTask, TConfig>(ITaskController controller, TaskConfigBase <TTask, TConfig> taskConfig)
            where TTask : TaskBase <TTask, TConfig>, new()
            where TConfig : TaskConfigBase <TTask, TConfig>, new()
        {
            var task         = Phase.Run("Create task", () => new TTask());
            var taskInternal = Phase.Run("Get ITaskInternal", () => (ITaskBaseInternal)task);

            Phase.Run("Set controller", () => taskInternal.Controller = controller);
            Phase.Run("Task run", () => taskInternal.Run((TConfig)taskConfig));
        }
예제 #3
0
 public static void RunAsSubtask <TTask, TConfig, TSubtask, TSubtaskConfig>(this TaskBase <TTask, TConfig> callingTask, TaskConfigBase <TSubtask, TSubtaskConfig> subtaskConfig)
     where TTask : TaskBase <TTask, TConfig>, new()
     where TConfig : TaskConfigBase <TTask, TConfig>, new()
     where TSubtask : TaskBase <TSubtask, TSubtaskConfig>, new()
     where TSubtaskConfig : TaskConfigBase <TSubtask, TSubtaskConfig>, new()
 {
     Phase.Run("Run subtask", () => DoRun(((ITaskBaseInternal)callingTask).Controller, subtaskConfig));
 }