运行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);
但是这样就结束了这个错误:
未处理的异常:System.ObjectDisposedException:The CancellationTokenSource已被处置。在 System.Threading.CancellationTokenSource.ThrowObjectDisposedException() 在 Microsoft.AspNetCore.Hosting.WebHostExtensions<> c__DisplayClass0_0.b__0() 在System.Action`1.Invoke(T obj)
我猜这是因为我在Start()中调用了Stop(),但我不知道其他任何方式。该应用程序确实关闭,所以也许没关系,但如果有人有任何建议我真的很感激。
谢谢, 蜂音
答案 0 :(得分:1)
我知道这是一个古老的问题,但是由于尚未回答,我只是经历了相同的过程,所以我想也许我可以在同一条船上帮助其他人。
我正在使用ASP.NET Core 2.1,但该解决方案似乎也适用于1.x。
通过向其添加IApplicationLifetime参数并在末尾添加ApplicationStarted委托来修改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
。