86 lines
2.7 KiB
C#
86 lines
2.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using JD.Interfaces.Composition;
|
|
using JD.Interfaces.Composition.Units;
|
|
|
|
namespace JD.Core
|
|
{
|
|
/// <summary>
|
|
/// Manager handling task creation. This manager is able to overload tasks according to the framework components availability.
|
|
/// </summary>
|
|
public class TaskManager
|
|
{
|
|
static TaskManager()
|
|
{
|
|
Instance = new TaskManager();
|
|
}
|
|
|
|
public static TaskManager Instance { get; }
|
|
|
|
private readonly IEnumerable<ITaskOverload> _availableOverloads;
|
|
protected TaskManager()
|
|
{
|
|
_availableOverloads = Objects.GetAllInstances<ITaskOverload>();
|
|
}
|
|
|
|
public Task CreateTask(Action action)
|
|
{
|
|
return new Task(OverloadTask(action));
|
|
}
|
|
|
|
public Task CreateTask(Action action, CancellationToken cancellationToken)
|
|
{
|
|
return new Task(OverloadTask(action), cancellationToken);
|
|
}
|
|
|
|
public Task CreateTask(Action action, TaskCreationOptions creationOptions)
|
|
{
|
|
return new Task(OverloadTask(action), creationOptions);
|
|
}
|
|
|
|
public Task CreateTask(Action action, CancellationToken cancellationToken, TaskCreationOptions creationOptions)
|
|
{
|
|
return new Task(OverloadTask(action), cancellationToken, creationOptions);
|
|
}
|
|
|
|
public Task CreateTask(Action<object> action, object state)
|
|
{
|
|
return new Task(OverloadTask(action), state);
|
|
}
|
|
|
|
public Task CreateTask(Action<object> action, object state, CancellationToken cancellationToken)
|
|
{
|
|
return new Task(OverloadTask(action), state, cancellationToken);
|
|
}
|
|
|
|
public Task CreateTask(Action<object> action, object state, TaskCreationOptions creationOptions)
|
|
{
|
|
return new Task(OverloadTask(action), state, creationOptions);
|
|
}
|
|
|
|
public Task CreateTask(Action<object> action, object state, CancellationToken cancellationToken, TaskCreationOptions creationOptions)
|
|
{
|
|
return new Task(OverloadTask(action), state, cancellationToken, creationOptions);
|
|
}
|
|
|
|
private Action OverloadTask(Action action)
|
|
{
|
|
foreach (var overload in _availableOverloads)
|
|
{
|
|
action = overload.OverloadTask(action);
|
|
}
|
|
return action;
|
|
}
|
|
|
|
private Action<object> OverloadTask(Action<object> action)
|
|
{
|
|
foreach (var overload in _availableOverloads)
|
|
{
|
|
action = overload.OverloadTask(action);
|
|
}
|
|
return action;
|
|
}
|
|
}
|
|
}
|