zoukankan      html  css  js  c++  java
  • AspNetCore.AsyncInitialization库源码分析

    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类的实现更值得借鉴。

  • 相关阅读:
    MFC的奇异non-modality模态对话框
    用于对话框,窗体视图,对话框和属性类型的布局管理器
    在。net中定制OpenFileDialog
    NFS的使用
    snmp-get
    zabbix-trap
    部署
    /etc/rc.local
    gj的交换机在升级了ios之后最新数据不刷新,
    计算型监控项
  • 原文地址:https://www.cnblogs.com/zhiyong-ITNote/p/10746554.html
Copyright © 2011-2022 走看看