预计业务端需要有重写的逻辑,因此修改命名
This commit is contained in:
@@ -6,6 +6,6 @@ namespace dotnetCampus.ApplicationStartupManager
|
|||||||
{
|
{
|
||||||
Task WaitStartupTaskAsync(string startupTaskKey);
|
Task WaitStartupTaskAsync(string startupTaskKey);
|
||||||
|
|
||||||
StartupTask GetStartupTask<T>() where T : StartupTask;
|
StartupTaskBase GetStartupTask<T>() where T : StartupTaskBase;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
namespace dotnetCampus.ApplicationStartupManager
|
namespace dotnetCampus.ApplicationStartupManager
|
||||||
{
|
{
|
||||||
internal sealed class NullObjectStartup : StartupTask
|
internal sealed class NullObjectStartup : StartupTaskBase
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace dotnetCampus.ApplicationStartupManager
|
|||||||
//Configuration = configuration;
|
//Configuration = configuration;
|
||||||
_waitStartupTaskAsync = waitStartupAsync;
|
_waitStartupTaskAsync = waitStartupAsync;
|
||||||
//Configs = configuration.CreateAppConfigurator();
|
//Configs = configuration.CreateAppConfigurator();
|
||||||
FastFail = fastFailAction ?? (exception => StartupTask.CompletedTask);
|
FastFail = fastFailAction ?? (exception => StartupTaskBase.CompletedTask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -146,7 +146,7 @@ namespace dotnetCampus.ApplicationStartupManager
|
|||||||
{
|
{
|
||||||
var key = criticalNodeKeys[i];
|
var key = criticalNodeKeys[i];
|
||||||
var current = GetStartupTaskWrapper(key);
|
var current = GetStartupTaskWrapper(key);
|
||||||
current.StartupTask = new NullObjectStartup();
|
current.TaskBase = new NullObjectStartup();
|
||||||
current.Categories = StartupCategory.All;
|
current.Categories = StartupCategory.All;
|
||||||
|
|
||||||
if (i - 1 >= 0)
|
if (i - 1 >= 0)
|
||||||
@@ -184,7 +184,7 @@ namespace dotnetCampus.ApplicationStartupManager
|
|||||||
public StartupManager AddCriticalNodes(string nodeName, string beforeTasks = null, string afterTasks = null)
|
public StartupManager AddCriticalNodes(string nodeName, string beforeTasks = null, string afterTasks = null)
|
||||||
{
|
{
|
||||||
var wrapper = GetStartupTaskWrapper(nodeName);
|
var wrapper = GetStartupTaskWrapper(nodeName);
|
||||||
wrapper.StartupTask = new NullObjectStartup();
|
wrapper.TaskBase = new NullObjectStartup();
|
||||||
wrapper.Categories = StartupCategory.All;
|
wrapper.Categories = StartupCategory.All;
|
||||||
|
|
||||||
if (beforeTasks?.Split(new[] {";"}, StringSplitOptions.RemoveEmptyEntries) is string[] before)
|
if (beforeTasks?.Split(new[] {";"}, StringSplitOptions.RemoveEmptyEntries) is string[] before)
|
||||||
@@ -240,7 +240,7 @@ namespace dotnetCampus.ApplicationStartupManager
|
|||||||
var dispatcher = _dispatcher;
|
var dispatcher = _dispatcher;
|
||||||
foreach (var wrapper in Graph)
|
foreach (var wrapper in Graph)
|
||||||
{
|
{
|
||||||
var startupTasks = wrapper.Dependencies.Select(s => GetStartupTaskWrapper(s).StartupTask);
|
var startupTasks = wrapper.Dependencies.Select(s => GetStartupTaskWrapper(s).TaskBase);
|
||||||
if (wrapper.UIOnly)
|
if (wrapper.UIOnly)
|
||||||
{
|
{
|
||||||
await dispatcher.InvokeAsync(() => wrapper.ExecuteTask(startupTasks, Context));
|
await dispatcher.InvokeAsync(() => wrapper.ExecuteTask(startupTasks, Context));
|
||||||
@@ -251,7 +251,7 @@ namespace dotnetCampus.ApplicationStartupManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await Graph.Last().StartupTask.TaskResult;
|
await Graph.Last().TaskBase.TaskResult;
|
||||||
|
|
||||||
Logger.RecordTime("AllStartupTasksCompleted");
|
Logger.RecordTime("AllStartupTasksCompleted");
|
||||||
|
|
||||||
@@ -280,8 +280,8 @@ namespace dotnetCampus.ApplicationStartupManager
|
|||||||
wrapper.UIOnly = meta.Scheduler == StartupScheduler.UIOnly;
|
wrapper.UIOnly = meta.Scheduler == StartupScheduler.UIOnly;
|
||||||
wrapper.Categories = meta.Categories;
|
wrapper.Categories = meta.Categories;
|
||||||
wrapper.CriticalLevel = meta.CriticalLevel;
|
wrapper.CriticalLevel = meta.CriticalLevel;
|
||||||
wrapper.StartupTask = meta.Instance;
|
wrapper.TaskBase = meta.Instance;
|
||||||
wrapper.StartupTask.Manager = this;
|
wrapper.TaskBase.Manager = this;
|
||||||
wrappers.Add(wrapper);
|
wrappers.Add(wrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -446,10 +446,10 @@ namespace dotnetCampus.ApplicationStartupManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Task WaitStartupTaskAsync(string startupTaskKey)
|
public Task WaitStartupTaskAsync(string startupTaskKey)
|
||||||
=> GetStartupTaskWrapper(startupTaskKey).StartupTask.TaskResult;
|
=> GetStartupTaskWrapper(startupTaskKey).TaskBase.TaskResult;
|
||||||
|
|
||||||
StartupTask IStartupManager.GetStartupTask<T>()
|
StartupTaskBase IStartupManager.GetStartupTask<T>()
|
||||||
=> GetStartupTaskWrapper(StartupTypeToKey(typeof(T))).StartupTask;
|
=> GetStartupTaskWrapper(StartupTypeToKey(typeof(T))).TaskBase;
|
||||||
|
|
||||||
private static string StartupTypeToKey(Type type)
|
private static string StartupTypeToKey(Type type)
|
||||||
=> type.Name.Remove(type.Name.Length - "startup".Length);
|
=> type.Name.Remove(type.Name.Length - "startup".Length);
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace dotnetCampus.ApplicationStartupManager
|
namespace dotnetCampus.ApplicationStartupManager
|
||||||
{
|
{
|
||||||
public abstract class StartupTask
|
public abstract class StartupTaskBase
|
||||||
{
|
{
|
||||||
// 由于我们都在编译期间收集 Attribute 了,当然也能收集使用方到底重写了哪个 Run。
|
// 由于我们都在编译期间收集 Attribute 了,当然也能收集使用方到底重写了哪个 Run。
|
||||||
// 这里传入的 isUIOnly 就是编译期间收集的那个属性。
|
// 这里传入的 isUIOnly 就是编译期间收集的那个属性。
|
||||||
@@ -49,7 +49,7 @@ namespace dotnetCampus.ApplicationStartupManager
|
|||||||
|
|
||||||
internal IStartupManager Manager { get; set; }
|
internal IStartupManager Manager { get; set; }
|
||||||
|
|
||||||
protected TValue FetchValue<TStartup, TValue>() where TStartup : StartupTask, IStartupValueProvider<TValue>
|
protected TValue FetchValue<TStartup, TValue>() where TStartup : StartupTaskBase, IStartupValueProvider<TValue>
|
||||||
{
|
{
|
||||||
var task = Manager.GetStartupTask<TStartup>();
|
var task = Manager.GetStartupTask<TStartup>();
|
||||||
var v = (IStartupValueProvider<TValue>)task;
|
var v = (IStartupValueProvider<TValue>)task;
|
||||||
@@ -8,7 +8,7 @@ namespace dotnetCampus.ApplicationStartupManager
|
|||||||
/// 记录 <typeparamref name="TStartupTask"/> 类型中标记的从 <see cref="StartupTaskAttribute"/> 中统一收集元数据。
|
/// 记录 <typeparamref name="TStartupTask"/> 类型中标记的从 <see cref="StartupTaskAttribute"/> 中统一收集元数据。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="TStartupTask"></typeparam>
|
/// <typeparam name="TStartupTask"></typeparam>
|
||||||
public class StartupTaskMetadata<TStartupTask> : StartupTaskMetadata where TStartupTask : StartupTask, new()
|
public class StartupTaskMetadata<TStartupTask> : StartupTaskMetadata where TStartupTask : StartupTaskBase, new()
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 创建包含 <typeparamref name="TStartupTask"/> 元数据的 <see cref="StartupTaskMetadata{TStartupTask}"/> 的新实例。
|
/// 创建包含 <typeparamref name="TStartupTask"/> 元数据的 <see cref="StartupTaskMetadata{TStartupTask}"/> 的新实例。
|
||||||
|
|||||||
@@ -4,29 +4,29 @@ using System.Threading;
|
|||||||
namespace dotnetCampus.ApplicationStartupManager
|
namespace dotnetCampus.ApplicationStartupManager
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 记录 <see cref="StartupTask"/> 类型中标记的从 <see cref="StartupTaskAttribute"/> 中统一收集元数据。
|
/// 记录 <see cref="StartupTaskBase"/> 类型中标记的从 <see cref="StartupTaskAttribute"/> 中统一收集元数据。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class StartupTaskMetadata
|
public class StartupTaskMetadata
|
||||||
{
|
{
|
||||||
private readonly Lazy<StartupTask> _taskLazy;
|
private readonly Lazy<StartupTaskBase> _taskLazy;
|
||||||
private string _afterTasks;
|
private string _afterTasks;
|
||||||
private string _beforeTasks;
|
private string _beforeTasks;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 创建 <see cref="StartupTaskMetadata"/> 的新实例。
|
/// 创建 <see cref="StartupTaskMetadata"/> 的新实例。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="key">表示此 <see cref="StartupTask"/> 的唯一标识符。</param>
|
/// <param name="key">表示此 <see cref="StartupTaskBase"/> 的唯一标识符。</param>
|
||||||
/// <param name="creator">此 <see cref="StartupTask"/> 实例的创建方法。</param>
|
/// <param name="creator">此 <see cref="StartupTaskBase"/> 实例的创建方法。</param>
|
||||||
public StartupTaskMetadata( string key, Func<StartupTask> creator)
|
public StartupTaskMetadata( string key, Func<StartupTaskBase> creator)
|
||||||
{
|
{
|
||||||
Key = key ?? throw new ArgumentNullException(nameof(key));
|
Key = key ?? throw new ArgumentNullException(nameof(key));
|
||||||
_taskLazy = new Lazy<StartupTask>(
|
_taskLazy = new Lazy<StartupTaskBase>(
|
||||||
creator ?? throw new ArgumentNullException(nameof(creator)),
|
creator ?? throw new ArgumentNullException(nameof(creator)),
|
||||||
LazyThreadSafetyMode.None);
|
LazyThreadSafetyMode.None);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取 <see cref="StartupTask"/> 的唯一标识符。
|
/// 获取 <see cref="StartupTaskBase"/> 的唯一标识符。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Key { get; }
|
public string Key { get; }
|
||||||
|
|
||||||
@@ -59,9 +59,9 @@ namespace dotnetCampus.ApplicationStartupManager
|
|||||||
public StartupScheduler Scheduler { get; set; }
|
public StartupScheduler Scheduler { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 根据从元数据中收集到的创建 <see cref="StartupTask"/> 的方法获取或创建 <see cref="StartupTask"/> 的实例。
|
/// 根据从元数据中收集到的创建 <see cref="StartupTaskBase"/> 的方法获取或创建 <see cref="StartupTaskBase"/> 的实例。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public StartupTask Instance => _taskLazy.Value;
|
public StartupTaskBase Instance => _taskLazy.Value;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取 <see cref="StartupTaskAttribute.CriticalLevel"/> 的值,如果没有获取或设置此启动任务的关键级别,则为 <see cref="StartupCriticalLevel.Unset"/>。
|
/// 获取 <see cref="StartupTaskAttribute.CriticalLevel"/> 的值,如果没有获取或设置此启动任务的关键级别,则为 <see cref="StartupCriticalLevel.Unset"/>。
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ namespace dotnetCampus.ApplicationStartupManager
|
|||||||
|
|
||||||
public StartupCategory Categories { get; internal set; } = StartupCategory.All;
|
public StartupCategory Categories { get; internal set; } = StartupCategory.All;
|
||||||
|
|
||||||
public StartupTask StartupTask { get; internal set; }
|
public StartupTaskBase TaskBase { get; internal set; }
|
||||||
public bool UIOnly { get; internal set; }
|
public bool UIOnly { get; internal set; }
|
||||||
public StartupCriticalLevel CriticalLevel { get; set; }
|
public StartupCriticalLevel CriticalLevel { get; set; }
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ namespace dotnetCampus.ApplicationStartupManager
|
|||||||
StartupTaskKey = startupTaskKey;
|
StartupTaskKey = startupTaskKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async void ExecuteTask(IEnumerable<StartupTask> dependencies, StartupContext context)
|
public async void ExecuteTask(IEnumerable<StartupTaskBase> dependencies, StartupContext context)
|
||||||
{
|
{
|
||||||
await Task.WhenAll(dependencies.Select(task => task.TaskResult));
|
await Task.WhenAll(dependencies.Select(task => task.TaskResult));
|
||||||
#pragma warning disable CS4014 // 由于此调用不会等待,因此在调用完成前将继续执行当前方法
|
#pragma warning disable CS4014 // 由于此调用不会等待,因此在调用完成前将继续执行当前方法
|
||||||
@@ -43,7 +43,7 @@ namespace dotnetCampus.ApplicationStartupManager
|
|||||||
//todo Tracer.Info($"[Startup]关键节点:{StartupTaskKey}开始执行");
|
//todo Tracer.Info($"[Startup]关键节点:{StartupTaskKey}开始执行");
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = await StartupTask.JoinAsync(context, UIOnly);
|
var result = await TaskBase.JoinAsync(context, UIOnly);
|
||||||
|
|
||||||
if (CriticalLevel == StartupCriticalLevel.Critical)
|
if (CriticalLevel == StartupCriticalLevel.Critical)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user