You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现线程顺序执行?确保AWSConfigurator先于Startup初始化

问题分析与解决方案

当前实现的问题

原代码中,ConfigureAppConfiguration使用了异步委托,但ASP.NET Core的配置初始化阶段不支持异步等待逻辑。这会导致AWSConfigurator.ConfigureBuilderAsync还未完成AWS参数存储的请求(获取数据库连接字符串),程序就已经进入Startup的初始化流程,最终日志输出空的连接字符串。

原Program.cs代码

public class Program
{
    static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }
    public static IHostBuilder CreateWebHostBuilder(string[] args)
    {
        return Host.CreateDefaultBuilder(args).UseServiceProviderFactory(new AutofacServiceProviderFactory())
            .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.ConfigureAppConfiguration(async (hostbuilder, builder) =>
            {
                var configuration = await AWSConfigurator.ConfigureBuilderAsync(builder);
                builder.AddConfiguration(configuration);
            });
            webBuilder.UseStartup<Startup>();
            webBuilder.UseContentRoot(Directory.GetCurrentDirectory());
        });
    }
}

AWSConfigurator核心代码片段

var request = new GetParameterRequest()
{
    Name = $"/development/MYAPP/ConnectionString"
};

解决方案

将异步配置调用改为同步等待,通过.Result强制等待AWSConfigurator.ConfigureBuilderAsync执行完成,确保配置加载完毕后再进入Startup阶段。此场景下使用.Result不会引发死锁,因为宿主启动的配置阶段尚未建立同步上下文。

修改后的Program.cs代码

return Host.CreateDefaultBuilder(args).UseServiceProviderFactory(new AutofacServiceProviderFactory())
    .ConfigureWebHostDefaults(webBuilder =>
{
    webBuilder.ConfigureAppConfiguration((hostbuilder, builder) =>
    {
        var configuration = AWSConfigurator.ConfigureBuilderAsync(builder).Result;
        builder.AddConfiguration(configuration);
    });
    webBuilder.UseStartup<Startup>();
    webBuilder.UseContentRoot(Directory.GetCurrentDirectory());
});

内容的提问来源于stack exchange,提问作者Jakub Jabłoński

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 22:52:35