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

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);
StartupTask GetStartupTask<T>() where T : StartupTask;
StartupTaskBase GetStartupTask<T>() where T : StartupTaskBase;
}
}

View File

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

View File

@@ -31,7 +31,7 @@ namespace dotnetCampus.ApplicationStartupManager
//Configuration = configuration;
_waitStartupTaskAsync = waitStartupAsync;
//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 current = GetStartupTaskWrapper(key);
current.StartupTask = new NullObjectStartup();
current.TaskBase = new NullObjectStartup();
current.Categories = StartupCategory.All;
if (i - 1 >= 0)
@@ -184,7 +184,7 @@ namespace dotnetCampus.ApplicationStartupManager
public StartupManager AddCriticalNodes(string nodeName, string beforeTasks = null, string afterTasks = null)
{
var wrapper = GetStartupTaskWrapper(nodeName);
wrapper.StartupTask = new NullObjectStartup();
wrapper.TaskBase = new NullObjectStartup();
wrapper.Categories = StartupCategory.All;
if (beforeTasks?.Split(new[] {";"}, StringSplitOptions.RemoveEmptyEntries) is string[] before)
@@ -240,7 +240,7 @@ namespace dotnetCampus.ApplicationStartupManager
var dispatcher = _dispatcher;
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)
{
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");
@@ -280,8 +280,8 @@ namespace dotnetCampus.ApplicationStartupManager
wrapper.UIOnly = meta.Scheduler == StartupScheduler.UIOnly;
wrapper.Categories = meta.Categories;
wrapper.CriticalLevel = meta.CriticalLevel;
wrapper.StartupTask = meta.Instance;
wrapper.StartupTask.Manager = this;
wrapper.TaskBase = meta.Instance;
wrapper.TaskBase.Manager = this;
wrappers.Add(wrapper);
}
@@ -446,10 +446,10 @@ namespace dotnetCampus.ApplicationStartupManager
}
public Task WaitStartupTaskAsync(string startupTaskKey)
=> GetStartupTaskWrapper(startupTaskKey).StartupTask.TaskResult;
=> GetStartupTaskWrapper(startupTaskKey).TaskBase.TaskResult;
StartupTask IStartupManager.GetStartupTask<T>()
=> GetStartupTaskWrapper(StartupTypeToKey(typeof(T))).StartupTask;
StartupTaskBase IStartupManager.GetStartupTask<T>()
=> GetStartupTaskWrapper(StartupTypeToKey(typeof(T))).TaskBase;
private static string StartupTypeToKey(Type type)
=> type.Name.Remove(type.Name.Length - "startup".Length);

View File

@@ -4,7 +4,7 @@ using System.Threading.Tasks;
namespace dotnetCampus.ApplicationStartupManager
{
public abstract class StartupTask
public abstract class StartupTaskBase
{
// 由于我们都在编译期间收集 Attribute 了,当然也能收集使用方到底重写了哪个 Run。
// 这里传入的 isUIOnly 就是编译期间收集的那个属性。
@@ -49,7 +49,7 @@ namespace dotnetCampus.ApplicationStartupManager
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 v = (IStartupValueProvider<TValue>)task;

View File

@@ -8,7 +8,7 @@ namespace dotnetCampus.ApplicationStartupManager
/// 记录 <typeparamref name="TStartupTask"/> 类型中标记的从 <see cref="StartupTaskAttribute"/> 中统一收集元数据。
/// </summary>
/// <typeparam name="TStartupTask"></typeparam>
public class StartupTaskMetadata<TStartupTask> : StartupTaskMetadata where TStartupTask : StartupTask, new()
public class StartupTaskMetadata<TStartupTask> : StartupTaskMetadata where TStartupTask : StartupTaskBase, new()
{
/// <summary>
/// 创建包含 <typeparamref name="TStartupTask"/> 元数据的 <see cref="StartupTaskMetadata{TStartupTask}"/> 的新实例。

View File

@@ -4,29 +4,29 @@ using System.Threading;
namespace dotnetCampus.ApplicationStartupManager
{
/// <summary>
/// 记录 <see cref="StartupTask"/> 类型中标记的从 <see cref="StartupTaskAttribute"/> 中统一收集元数据。
/// 记录 <see cref="StartupTaskBase"/> 类型中标记的从 <see cref="StartupTaskAttribute"/> 中统一收集元数据。
/// </summary>
public class StartupTaskMetadata
{
private readonly Lazy<StartupTask> _taskLazy;
private readonly Lazy<StartupTaskBase> _taskLazy;
private string _afterTasks;
private string _beforeTasks;
/// <summary>
/// 创建 <see cref="StartupTaskMetadata"/> 的新实例。
/// </summary>
/// <param name="key">表示此 <see cref="StartupTask"/> 的唯一标识符。</param>
/// <param name="creator">此 <see cref="StartupTask"/> 实例的创建方法。</param>
public StartupTaskMetadata( string key, Func<StartupTask> creator)
/// <param name="key">表示此 <see cref="StartupTaskBase"/> 的唯一标识符。</param>
/// <param name="creator">此 <see cref="StartupTaskBase"/> 实例的创建方法。</param>
public StartupTaskMetadata( string key, Func<StartupTaskBase> creator)
{
Key = key ?? throw new ArgumentNullException(nameof(key));
_taskLazy = new Lazy<StartupTask>(
_taskLazy = new Lazy<StartupTaskBase>(
creator ?? throw new ArgumentNullException(nameof(creator)),
LazyThreadSafetyMode.None);
}
/// <summary>
/// 获取 <see cref="StartupTask"/> 的唯一标识符。
/// 获取 <see cref="StartupTaskBase"/> 的唯一标识符。
/// </summary>
public string Key { get; }
@@ -59,9 +59,9 @@ namespace dotnetCampus.ApplicationStartupManager
public StartupScheduler Scheduler { get; set; }
/// <summary>
/// 根据从元数据中收集到的创建 <see cref="StartupTask"/> 的方法获取或创建 <see cref="StartupTask"/> 的实例。
/// 根据从元数据中收集到的创建 <see cref="StartupTaskBase"/> 的方法获取或创建 <see cref="StartupTaskBase"/> 的实例。
/// </summary>
public StartupTask Instance => _taskLazy.Value;
public StartupTaskBase Instance => _taskLazy.Value;
/// <summary>
/// 获取 <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 StartupTask StartupTask { get; internal set; }
public StartupTaskBase TaskBase { get; internal set; }
public bool UIOnly { get; internal set; }
public StartupCriticalLevel CriticalLevel { get; set; }
@@ -29,7 +29,7 @@ namespace dotnetCampus.ApplicationStartupManager
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));
#pragma warning disable CS4014 // 由于此调用不会等待,因此在调用完成前将继续执行当前方法
@@ -43,7 +43,7 @@ namespace dotnetCampus.ApplicationStartupManager
//todo Tracer.Info($"[Startup]关键节点:{StartupTaskKey}开始执行");
}
var result = await StartupTask.JoinAsync(context, UIOnly);
var result = await TaskBase.JoinAsync(context, UIOnly);
if (CriticalLevel == StartupCriticalLevel.Critical)
{