AspNetCore.AsyncInitialization库源码分析

2023-06-12,,

AspNetCore.AsyncInitialization 这个库是用来实现在asp.net core应用程序启动时异步执行异步任务。可参考:如何在ASP.NET Core程序启动时运行异步任务(2)。IAsyncInitializer接口就是用来实现执行异步任务的接口,此接口签名:

public interface IAsyncInitializer
{
/// <summary>
/// Performs async initialization.
/// </summary>
/// <returns>A task that represents the initialization completion.</returns>
Task InitializeAsync();
}

默认实现:

private class DelegateAsyncInitializer : IAsyncInitializer
{
private readonly Func<Task> _initializer; public DelegateAsyncInitializer(Func<Task> initializer)
{
_initializer = initializer;
} public Task InitializeAsync()
{
return _initializer();
}
}

依赖注入:

public static IServiceCollection AddAsyncInitializer(this IServiceCollection services, Func<Task> initializer)
{
return services
.AddAsyncInitialization()
.AddSingleton<IAsyncInitializer>(new DelegateAsyncInitializer(initializer));
}

不得不说DelegateAsyncInitializer类的实现比较巧,一般我们是如此的实现IAsyncInitializer接口:

public interface IDependency
{
} public class Initializer : IAsyncInitializer
{
// ReSharper disable once NotAccessedField.Local
private readonly IDependency _dependency; public Initializer(IDependency dependency)
{
_dependency = dependency;
}
public Task InitializeAsync() => Task.CompletedTask;
}

相比较这种实现,DelegateAsyncInitializer类的实现更值得借鉴。

AspNetCore.AsyncInitialization库源码分析的相关教程结束。

《AspNetCore.AsyncInitialization库源码分析.doc》

下载本文的Word格式文档,以方便收藏与打印。