这个库是用来实现在asp.net core应用程序启动时异步执行异步任务。可参考:。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类的实现更值得借鉴。