预计业务端需要有重写的逻辑,因此修改命名

This commit is contained in:
lindexi
2022-03-02 14:25:05 +08:00
parent 360190e936
commit 4c05583398
8 changed files with 27 additions and 27 deletions

View File

@@ -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;
} }
} }

View File

@@ -1,6 +1,6 @@
namespace dotnetCampus.ApplicationStartupManager namespace dotnetCampus.ApplicationStartupManager
{ {
internal sealed class NullObjectStartup : StartupTask internal sealed class NullObjectStartup : StartupTaskBase
{ {
} }

View File

@@ -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);
} }
} }
} }

View File

@@ -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);

View File

@@ -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;

View File

@@ -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}"/> 的新实例。

View File

@@ -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"/>。

View File

@@ -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)
{ {