您的当前位置:首页正文

AspNetCore.AsyncInitialization库源码分析

2024-11-25 来源:个人技术集锦

 这个库是用来实现在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类的实现更值得借鉴。

转载于:https://www.cnblogs.com/zhiyong-ITNote/p/10746554.html

显示全文