This commit is contained in:
Simon Gruber
2023-11-22 07:46:10 +01:00
parent beb194c106
commit 8ada606fa6
141 changed files with 158 additions and 139 deletions
+46
View File
@@ -0,0 +1,46 @@
using System.Text;
namespace CLI.Monitor;
public class CliTaskMonitor : TaskMonitor
{
/// <inheritdoc />
public CliTaskMonitor(IEnumerable<(string? Name, Task Task)> tasks) : base(tasks) { }
/// <inheritdoc />
public CliTaskMonitor(IEnumerable<Task> tasks) : base(tasks) { }
#region Overrides of TaskMonitor
/// <inheritdoc />
protected override void OnUpdate(ICollection<(string? Name, Task Task)> tasks)
{
var sb = new StringBuilder(tasks.Count * 30);
foreach (var (name, task) in tasks)
{
sb.Append($"{StatusMap[task.Status],-5}");
if (name is not null)
{
sb.Append(": ")
.Append(name);
}
sb.AppendLine();
if (task.Exception is not null)
{
sb.Append("> EX: ")
.AppendLine(task.Exception.Message);
}
}
sb.AppendLine();
Console.Clear();
Console.Write(sb.ToString());
}
#endregion
}
+6
View File
@@ -0,0 +1,6 @@
namespace CLI.Monitor;
public interface ITaskMonitor
{
Task Run();
}
+39
View File
@@ -0,0 +1,39 @@
namespace CLI.Monitor;
public abstract class TaskMonitor : ITaskMonitor
{
protected static IReadOnlyDictionary<TaskStatus, string> StatusMap { get; } =
new Dictionary<TaskStatus, string>
{
{ TaskStatus.RanToCompletion, "DONE" },
{ TaskStatus.Faulted, "FAULT" },
{ TaskStatus.Canceled, "CANCL" },
{ TaskStatus.Created, "WAIT" },
{ TaskStatus.WaitingToRun, "WAIT" },
{ TaskStatus.WaitingForActivation, "WAIT" },
{ TaskStatus.Running, "RUN" },
{ TaskStatus.WaitingForChildrenToComplete, "RUN" },
};
private readonly ICollection<(string? Name, Task Task)> _tasks;
protected TaskMonitor(IEnumerable<(string? Name, Task Task)> tasks) => _tasks = tasks.ToArray();
protected TaskMonitor(IEnumerable<Task> tasks) :
this(tasks.Select(t => (t.Id.ToString(), t))!)
{ }
public Task Run()
{
var waitTask = Task.WhenAll(_tasks.Select(i => i.Task));
while (!waitTask.Wait(TimeSpan.FromSeconds(1)))
{
OnUpdate(_tasks);
}
return waitTask;
}
protected abstract void OnUpdate(ICollection<(string? Name, Task Task)> tasks);
}