예제 #1
0
        /// <summary>
        /// Creates a new task and starts the task
        /// </summary>
        /// <param name="taskMetadata">Task Metadata</param>
        /// <param name="taskToRun">The function to run the operation</param>
        /// <param name="taskToCancel">The function to cancel the operation</param>
        /// <returns></returns>
        public SqlTask CreateAndRun(TaskMetadata taskMetadata, Func <SqlTask, Task <TaskResult> > taskToRun, Func <SqlTask, Task <TaskResult> > taskToCancel)
        {
            var sqlTask = CreateTask(taskMetadata, taskToRun, taskToCancel);

            sqlTask.Run();
            return(sqlTask);
        }
        public SqlTask CreateAndRun <T>(TaskMetadata taskMetadata) where T : SqlTask, new()
        {
            var sqlTask = CreateTask <T>(taskMetadata);

            sqlTask.Run();
            return(sqlTask);
        }
예제 #3
0
        /// <summary>
        /// Initializes the Sql task
        /// </summary>
        /// <param name="taskMetadata">Task metadata</param>
        /// <param name="taskToRun">The function to execute the operation</param>
        /// <param name="taskToCancel">The function to cancel the operation</param>
        public virtual void Init(TaskMetadata taskMetadata, Func <SqlTask, Task <TaskResult> > taskToRun, Func <SqlTask, Task <TaskResult> > taskToCancel)
        {
            Validate.IsNotNull(nameof(taskMetadata), taskMetadata);
            Validate.IsNotNull(nameof(taskToRun), taskToRun);

            TaskMetadata = taskMetadata;
            TaskToRun    = taskToRun;
            TaskToCancel = taskToCancel;
            StartTime    = DateTime.UtcNow;
            TaskId       = Guid.NewGuid();
            TokenSource  = new CancellationTokenSource();
        }
예제 #4
0
        /// <summary>
        /// Creates a new task
        /// </summary>
        /// <param name="taskMetadata">Task Metadata</param>
        /// <param name="taskToRun">The function to run the operation</param>
        /// <param name="taskToCancel">The function to cancel the operation</param>
        /// <returns></returns>
        public SqlTask CreateTask(TaskMetadata taskMetadata, Func <SqlTask, Task <TaskResult> > taskToRun, Func <SqlTask, Task <TaskResult> > taskToCancel)
        {
            ValidateNotDisposed();

            var newtask = new SqlTask(taskMetadata, taskToRun, taskToCancel);

            lock (lockObject)
            {
                tasks.AddOrUpdate(newtask.TaskId, newtask, (key, oldValue) => newtask);
            }
            OnTaskAdded(new TaskEventArgs <SqlTask>(newtask));
            return(newtask);
        }
        /// <summary>
        /// Creates a new task
        /// </summary>
        /// <param name="taskMetadata">Task Metadata</param>
        /// <param name="taskToRun">The function to run the operation</param>
        /// <param name="taskToCancel">The function to cancel the operation</param>
        /// <returns>The new sql task</returns>
        public SqlTask CreateTask <T>(TaskMetadata taskMetadata, Func <SqlTask, Task <TaskResult> > taskToRun, Func <SqlTask, Task <TaskResult> > taskToCancel) where T : SqlTask, new()
        {
            ValidateNotDisposed();

            var newTask = new T();

            newTask.Init(taskMetadata, taskToRun, taskToCancel);
            if (taskMetadata != null && taskMetadata.TaskOperation != null)
            {
                taskMetadata.TaskOperation.SqlTask = newTask;
            }

            lock (lockObject)
            {
                tasks.AddOrUpdate(newTask.TaskId, newTask, (key, oldValue) => newTask);
            }
            OnTaskAdded(new TaskEventArgs <SqlTask>(newTask));
            return(newTask);
        }
예제 #6
0
        /// <summary>
        /// Creates task metadata given the request parameters
        /// </summary>
        /// <param name="requestParam">Request parameters</param>
        /// <param name="taskName">Task name</param>
        /// <param name="taskOperation">Task operation</param>
        /// <param name="connectionService">Connection Service</param>
        /// <returns>Task metadata</returns>
        public static TaskMetadata Create(IRequestParams requestParam, string taskName, ITaskOperation taskOperation, ConnectionService connectionService, string targetLocation = null)
        {
            TaskMetadata   taskMetadata = new TaskMetadata();
            ConnectionInfo connInfo;

            connectionService.TryFindConnection(
                requestParam.OwnerUri,
                out connInfo);

            if (connInfo != null)
            {
                taskMetadata.ServerName = connInfo.ConnectionDetails.ServerName;
            }

            if (connInfo != null)
            {
                taskMetadata.DatabaseName = connInfo.ConnectionDetails.DatabaseName;
            }

            IScriptableRequestParams scriptableRequestParams = requestParam as IScriptableRequestParams;

            if (scriptableRequestParams != null && scriptableRequestParams.TaskExecutionMode == TaskExecutionMode.Script)
            {
                taskMetadata.Name = string.Format("{0} {1}", taskName, SR.ScriptTaskName);
            }
            else
            {
                taskMetadata.Name = taskName;
            }
            taskMetadata.TaskExecutionMode = scriptableRequestParams.TaskExecutionMode;

            taskMetadata.TaskOperation  = taskOperation;
            taskMetadata.OwnerUri       = requestParam.OwnerUri;
            taskMetadata.TargetLocation = targetLocation;

            return(taskMetadata);
        }
예제 #7
0
 /// <summary>
 /// Creates new instance of SQL task
 /// </summary>
 /// <param name="taskMetdata">Task Metadata</param>
 /// <param name="taskToRun">The function to run to start the task</param>
 public SqlTask(TaskMetadata taskMetdata, Func <SqlTask, Task <TaskResult> > taskToRun, Func <SqlTask, Task <TaskResult> > taskToCancel)
 {
     Init(taskMetdata, taskToRun, taskToCancel);
 }
예제 #8
0
 /// <summary>
 /// Creates a new task
 /// </summary>
 /// <param name="taskMetadata">Task Metadata</param>
 /// <param name="taskToRun">The function to run the operation</param>
 /// <returns></returns>
 public SqlTask CreateTask(TaskMetadata taskMetadata, Func <SqlTask, Task <TaskResult> > taskToRun)
 {
     return(CreateTask(taskMetadata, taskToRun, null));
 }
 /// <summary>
 /// Creates a new task
 /// </summary>
 /// <param name="taskMetadata">Task Metadata</param>
 /// <returns>The new sql task</returns>
 public SqlTask CreateTask <T>(TaskMetadata taskMetadata) where T : SqlTask, new()
 {
     Validate.IsNotNull(nameof(taskMetadata), taskMetadata);
     return(CreateTask <T>(taskMetadata, TaskOperationHelper.ExecuteTaskAsync, TaskOperationHelper.CancelTaskAsync));
 }
예제 #10
0
 /// <summary>
 /// Creates a new task
 /// </summary>
 /// <param name="taskMetadata">Task Metadata</param>
 /// <param name="taskToRun">The function to run the operation</param>
 /// <param name="taskToCancel">The function to cancel the operation</param>
 /// <returns>The new sql task</returns>
 public SqlTask CreateTask(TaskMetadata taskMetadata, Func <SqlTask, Task <TaskResult> > taskToRun, Func <SqlTask, Task <TaskResult> > taskToCancel)
 {
     return(CreateTask <SqlTask>(taskMetadata, taskToRun, taskToCancel));
 }
예제 #11
0
 /// <summary>
 /// Creates a new task
 /// </summary>
 /// <param name="taskMetadata">Task Metadata</param>
 /// <param name="taskToRun">The function to run the operation</param>
 /// <returns></returns>
 public SqlTask CreateTask <T>(TaskMetadata taskMetadata, Func <SqlTask, Task <TaskResult> > taskToRun) where T : SqlTask, new()
 {
     return(CreateTask <T>(taskMetadata, taskToRun, null));
 }