public void Init(string description, string reference, bool isLongRunning) { _taskInfo = new LiteTaskInfo(description, reference, isLongRunning) { ctsPerTask = new CancellationTokenSource() }; }
private async Task AddTask(LiteTaskInfo liteTask) { try { bool success = await taskLock.WaitAsync(60000, cts.Token).ConfigureAwait(false); tasks.Add(liteTask); } catch (TaskCanceledException e) { _logger.Log(LogLevel.Information, $"{e.Message}"); } catch (Exception e) { _logger.LogFullException(e); } finally { try { if (taskLock.CurrentCount == 0) { taskLock.Release(); } } catch (Exception) { } } }
private async Task CheckLongRunningTaskItem(LITETask liteTask, LiteTaskInfo task) { Throw.IfNull(liteTask); Throw.IfNull(task); if (task.task == null) { return; } TaskStatus status = task.task.Status; switch (status) { case TaskStatus.Canceled: case TaskStatus.Faulted: case TaskStatus.RanToCompletion: { task.MarkTaskComplete(); //this is in case taskCompletion didn't fire await liteTask.RemoveTask(task); break; } } _logger.Log(LogLevel.Information, $" ->task: {task.taskID} {((task.task.Status.Equals(TaskStatus.WaitingForActivation)) ? "Running" : task.task.Status.ToString())} elapsed: {((task.completionDate == null) ? (DateTime.Now - task.bornOnDate) : (task.completionDate - task.bornOnDate))} {task.reference} {task.description}"); }
public async Task TaskCompletion(Profile profile) { var taskInfo = ""; try { while (true) { Task[] arrayOfTasks = null; LiteTaskInfo task = null; arrayOfTasks = await GetShortRunningAsyncTasks().ConfigureAwait(false); if (arrayOfTasks != null && arrayOfTasks.Length > 0) { var completedTask = await Task.WhenAny(arrayOfTasks); if (completedTask != null) { try { task = (await GetLITETasks().ConfigureAwait(false)).Find(e => e.task == completedTask); } catch (Exception e) { _logger.LogFullException(e, taskInfo); } } if (task != null && task.task != null) { task.MarkTaskComplete(); _logger.Log(LogLevel.Information, $"{taskInfo} task: {task?.taskID} {((task.task.Status.Equals(TaskStatus.WaitingForActivation)) ? "Running" : task.task.Status.ToString())} elapsed: {((task.completionDate == null) ? (DateTime.Now - task.bornOnDate) : (task.completionDate - task.bornOnDate))} {task.reference} {task.description}"); await RemoveTask(task); } } else { //var profile = _profileStorage.Current; await Task.Delay(profile.taskDelay, LITETask._cts.Token).ConfigureAwait(false); } } } catch (TaskCanceledException) { _logger.Log(LogLevel.Information, $"Task was canceled."); } catch (Exception e) { _logger.LogFullException(e, taskInfo); } finally { Stop($"TaskCompletion"); } }
public override bool Equals(object obj) { // All we are checking here is the reference field if (obj == null || GetType() != obj.GetType()) { return(false); } LiteTaskInfo d = (LiteTaskInfo)obj; return(_taskInfo.reference == d.reference); }
public LiteTaskInfo Create(string description, string reference, bool isLongRunning) { LiteTaskInfo task = new LiteTaskInfo(description, reference, isLongRunning); try { AddTask(task).Wait(); } catch (Exception e) { _logger.LogFullException(e); } return(task); }
public void CreateAndRun(int taskID, Task task, string type, string description, string reference, bool isLongRunning) { try { _taskInfo = new LiteTaskInfo(taskID, task, type, description, reference, isLongRunning) { ct = cts.Token, ctsPerTask = new CancellationTokenSource() }; AddTask(_taskInfo).Wait(); } catch (Exception e) { _logger.LogCritical(e, "Could not create and run task"); } }
public void CreateAndRun(Action action, string description, string reference, bool isLongRunning) { try { _taskInfo = new LiteTaskInfo(action, description, reference, isLongRunning) { ctsPerTask = new CancellationTokenSource() }; _taskInfo.ct = _taskInfo.ctsPerTask.Token; AddTask(_taskInfo).Wait(); _taskInfo.task = Task.Factory.StartNew(action, _taskInfo.ct, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default); } catch (Exception e) { _logger.LogCritical(e, "CreateAndRun failed"); } }
internal async Task RemoveTask(LiteTaskInfo liteTask) { _logger.Log(LogLevel.Debug, $"Removing task: {liteTask.taskID} reference: {liteTask.reference} description: {liteTask.description}"); try { bool success = await taskLock.WaitAsync(60000, cts.Token).ConfigureAwait(false); } catch (Exception e) { _logger.LogFullException(e); } finally { try { if (taskLock.CurrentCount == 0) { taskLock.Release(); } } catch (Exception) { } } try { var result = tasks.Remove(liteTask); // if (!result) // { // if (Logger.logger.FileTraceLevel == "Verbose") _logger.Log(LogLevel.Verbose, $"Unable to remove task: {liteTask.taskID} reference: {liteTask.reference} description: {liteTask.description}"); // } } catch (Exception e) { _logger.LogFullException(e); } finally { } }
public void Init(string reference, bool isLongRunning) { _taskInfo = new LiteTaskInfo(reference, isLongRunning); }
public int NewTaskID() { return(LiteTaskInfo.NewTaskID()); }
private async Task ProcessTempTaskItem(LITETask liteTask, LiteTaskInfo task) { if (task.task == null) { return; } //Report status on short running tasks if (task.isLongRunning) //long running tasks that manage mini-tasks { return; } switch (task.task.Status) { case TaskStatus.WaitingForActivation: case TaskStatus.Created: if (DateTime.Now.Second % 10 == 0) { _logger.Log(LogLevel.Information, $"task: {task.taskID} {((task.task.Status.Equals(TaskStatus.WaitingForActivation)) ? "Running" : task.task.Status.ToString())} elapsed: {((task.completionDate == null) ? (DateTime.Now - task.bornOnDate) : (task.completionDate - task.bornOnDate))} {task.reference} {task.description}"); } break; case TaskStatus.Running: case TaskStatus.WaitingForChildrenToComplete: case TaskStatus.WaitingToRun: if (DateTime.Now.Second % 10 == 0) { _logger.Log(LogLevel.Information, $"task: {task.taskID} {((task.task.Status.Equals(TaskStatus.WaitingForActivation)) ? "Running" : task.task.Status.ToString())} elapsed: {((task.completionDate == null) ? (DateTime.Now - task.bornOnDate) : (task.completionDate - task.bornOnDate))} {task.reference} {task.description}"); } break; case TaskStatus.Canceled: case TaskStatus.Faulted: case TaskStatus.RanToCompletion: task.MarkTaskComplete(); //this is in case taskCompletion didn't fire await liteTask.RemoveTask(task); _logger.Log(LogLevel.Information, $"task: {task.taskID} {((task.task.Status.Equals(TaskStatus.WaitingForActivation)) ? "Running" : task.task.Status.ToString())} elapsed: {((task.completionDate == null) ? (DateTime.Now - task.bornOnDate) : (task.completionDate - task.bornOnDate))} {task.reference} {task.description}"); break; } var profile = _profileStorage.Current; if (DateTime.Now - task.bornOnDate > profile.maxTaskDuration) { _logger.Log(LogLevel.Information, $"task: {task.taskID} {((task.task.Status.Equals(TaskStatus.WaitingForActivation)) ? "Running" : task.task.Status.ToString())} elapsed: {((task.completionDate == null) ? (DateTime.Now - task.bornOnDate) : (task.completionDate - task.bornOnDate))} {task.reference} {task.description} RUNNING LONGER THAN profile.maxTaskDuration."); task.ctsPerTask.Cancel(); } }