gpt4 book ai didi

asp.net-core - 如何在 ApplicationStarted 事件中优雅地中止 Asp.Net Core 启动?

转载 作者:行者123 更新时间:2023-12-03 13:37:55 25 4
gpt4 key购买 nike

运行 Asp.Net Core 1.1

大多数时候,无论启动期间发生什么,我都希望我的 ASP.NET Core 应用程序能够运行,但是在启动期间有几个严重错误,我希望它关闭。在 Startup.cs 中,我尝试在 Configure 方法期间将 ApplicationLifetime 传递给 ApplicationStarted 事件:

            appLifetime.ApplicationStarted.Register((al) => {
var appLtime = (IApplicationLifetime)al;

try {
... various startup code....

} catch (Exception ex) {
appLtime.StopApplication();
}

}, appLifetime);

但这结束了抛出这个错误:

Unhandled Exception: System.ObjectDisposedException: The CancellationTokenSource has been disposed. at System.Threading.CancellationTokenSource.ThrowObjectDisposedException() at Microsoft.AspNetCore.Hosting.WebHostExtensions.<>c__DisplayClass0_0.b__0() at System.Action`1.Invoke(T obj)



我猜这是因为我在 Start() 中调用了 Stop(),但我不知道任何其他方式。该应用程序确实关闭了,所以也许没关系,但如果有人有任何建议,我真的很感激。

谢谢,
嗡嗡声

最佳答案

我知道这是一个老问题,但由于它还没有得到回答,而且我刚刚经历了同样的过程,我想也许我可以在同一条船上帮助其他人。

我正在使用 ASP.NET Core 2.1,但该解决方案似乎也适用于 1.x。

通过向其添加 IApplicationLifetime 参数并在末尾添加 ApplicationStarted 委托(delegate)来修改您的 Configure 方法,如下所示......

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime applicationLifetime)
{
// existing code

applicationLifetime.ApplicationStartup.Register(() => OnStartUp(applicationLifetime));
}

在 Startup.cs 文件中创建一个 OnStartUp 方法,如下所示...
public void OnStartUp(IApplicationLifetime applicationLifetime)
{
try
{
// Do your startup magic
}
catch(Exception ex)
{
applicationLifetime.StopApplication();
}
}

如果在您的 OnStartUp 代码中出现问题,它现在将成功关闭应用程序而不会抛出 ObjectDisposedException .

关于asp.net-core - 如何在 ApplicationStarted 事件中优雅地中止 Asp.Net Core 启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42370171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com