运行 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);
Run Code Online (Sandbox Code Playgroud)
但这结束抛出这个错误:
未处理的异常:System.ObjectDisposedException:CancellationTokenSource 已被处理。在 System.Threading.CancellationTokenSource.ThrowObjectDisposedException() 在 Microsoft.AspNetCore.Hosting.WebHostExtensions.<>c__DisplayClass0_0.b__0() 在 System.Action`1.Invoke(T obj)
我猜这是因为我从 Start() 中调用 Stop(),但我不知道其他任何方法。该应用程序确实关闭了,所以也许这无关紧要,但如果有人有任何建议,我真的很感激。
谢谢,嗡嗡声
小智 5
我知道这是一个老问题,但由于它还没有得到回答,而且我刚刚经历了同样的过程,我想也许我可以帮助其他人在同一条船上。
我使用的是 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));
}
Run Code Online (Sandbox Code Playgroud)
在 Startup.cs 文件中创建一个 OnStartUp 方法,如下所示...
public void OnStartUp(IApplicationLifetime applicationLifetime)
{
try
{
// Do your startup magic
}
catch(Exception ex)
{
applicationLifetime.StopApplication();
}
}
Run Code Online (Sandbox Code Playgroud)
如果在您的 OnStartUp 代码期间出现问题,它现在将成功关闭应用程序而不会抛出ObjectDisposedException.
| 归档时间: |
|
| 查看次数: |
1141 次 |
| 最近记录: |