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; } }
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)); }
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)); }