/// <summary> /// Executes the task. /// </summary> public Task <WorkUnitResult> ExecuteTask(TargetLoggingContext targetLoggingContext, BuildRequestEntry requestEntry, ITargetBuilderCallback targetBuilderCallback, ProjectTargetInstanceChild task, TaskExecutionMode mode, Lookup lookupForInference, Lookup lookupForExecution, CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) { return(Task <WorkUnitResult> .FromResult(new WorkUnitResult(WorkUnitResultCode.Canceled, WorkUnitActionCode.Stop, null))); } ProjectOnErrorInstance errorTask = task as ProjectOnErrorInstance; if (null != errorTask) { ErrorTasks.Add(errorTask); } else { ProjectTaskInstance taskInstance = task as ProjectTaskInstance; ExecutedTasks.Add(taskInstance); if ((mode & TaskExecutionMode.InferOutputsOnly) == TaskExecutionMode.InferOutputsOnly) { lookupForInference.AddNewItem(new ProjectItemInstance(requestEntry.RequestConfiguration.Project, taskInstance.Name + "_Item", "Item", task.Location.File)); } else if ((mode & TaskExecutionMode.ExecuteTaskAndGatherOutputs) == TaskExecutionMode.ExecuteTaskAndGatherOutputs) { lookupForExecution.AddNewItem(new ProjectItemInstance(requestEntry.RequestConfiguration.Project, taskInstance.Name + "_Item", "Item", task.Location.File)); } if (String.Equals(taskInstance.Name, "CallTarget", StringComparison.OrdinalIgnoreCase)) { taskInstance.GetParameter("Targets"); char[] splitter = new char[] { ';' }; targetBuilderCallback.LegacyCallTarget(taskInstance.GetParameter("Targets").Split(splitter), false, taskInstance.Location); } _taskNumber++; if (FailTaskNumber == _taskNumber) { if (taskInstance.ContinueOnError == "True") { return(Task <WorkUnitResult> .FromResult(new WorkUnitResult(WorkUnitResultCode.Failed, WorkUnitActionCode.Continue, null))); } return(Task <WorkUnitResult> .FromResult(new WorkUnitResult(WorkUnitResultCode.Failed, WorkUnitActionCode.Stop, null))); } } return(Task <WorkUnitResult> .FromResult(new WorkUnitResult(WorkUnitResultCode.Success, WorkUnitActionCode.Continue, null))); }
public ExecutedTasks Execute(ICollection <Runnable> actions, TimeSpan timeout) { ExecutedTasks result = new ExecutedTasks(); List <Task> continueTasks = new List <Task>(); var cts = new CancellationTokenSource(); cts.CancelAfter(timeout); var cancellationToken = cts.Token; foreach (var runnable in actions) { TaskCompletionSource <object> taskCompletionSource = new TaskCompletionSource <object>(); Task task = taskCompletionSource.Task; //TODO Add missing logic here. var continueTask = task.ContinueWith(t => ContinuationFunction(t, runnable, result)); continueTasks.Add(continueTask); } Task.WaitAll(continueTasks.ToArray()); return(result); }
private void ContinuationFunction(Task task, Runnable action, ExecutedTasks result) { //TODO add logic here. }