如何解决如何等待后台工作人员完成asp.net核心配置?
我创建了一个 blazor 服务器应用程序,它也使用了 BackgroundService
/ IHostedService
- 不幸的是,这些服务在 Configure
中的 Startup
方法被调用之前启动+执行。因此,在服务中使用它们之前不会完成迁移/数据库创建。
我已经找到了解决方法,但我想知道是否有适当的方法来解决这个问题。
对于有同样问题的人,我的解决方法是:
public class ApplicationStateTransmitter
{
private readonly taskcompletionsource _configurationDone;
public ApplicationStateTransmitter()
{
_configurationDone = new taskcompletionsource(null);
}
public Task ConfigurationDone => _configurationDone.Task;
public void NotifyConfigurationDone() => _configurationDone.SetResult();
}
启动.配置服务:
services.AddSingleton<ApplicationStateTransmitter>();
启动.配置:
using (var serviceScope = serviceScopeFactory.CreateScope())
{
using (var context = serviceScope.ServiceProvider.GetrequiredService<ApplicationDbContext>())
{
if (!context.Database.CanConnect())
{
logger.Loginformation("Database does not exist yet - Creating database through migrations");
context.Database.Migrate();
}
else
{
if (context.Database.GetPendingMigrations().Any())
{
logger.Loginformation("Applying database migration");
context.Database.Migrate();
logger.Loginformation("Applying database migration done");
}
else
{
logger.LogDebug("No pending migrations found");
}
}
}
}
applicationStateTransmitter.NotifyConfigurationDone();
logger.Loginformation("Configuration done");
注入实例并像这样等待
await _applicationStateTransmitter.ConfigurationDone;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。