diff --git a/src/Hosting/Hosting/src/WebHostExtensions.cs b/src/Hosting/Hosting/src/WebHostExtensions.cs index e73399c41995..6814d1d49f5f 100644 --- a/src/Hosting/Hosting/src/WebHostExtensions.cs +++ b/src/Hosting/Hosting/src/WebHostExtensions.cs @@ -135,18 +135,21 @@ private static void AttachCtrlcSigtermShutdown(CancellationTokenSource cts, Manu { void Shutdown() { - if (!cts.IsCancellationRequested) + try { - if (!string.IsNullOrEmpty(shutdownMessage)) - { - Console.WriteLine(shutdownMessage); - } - try + if (!cts.IsCancellationRequested) { + if (!string.IsNullOrEmpty(shutdownMessage)) + { + Console.WriteLine(shutdownMessage); + } cts.Cancel(); } - catch (ObjectDisposedException) { } } + // When hosting with IIS in-process, we detach the Console handle on main thread exit. + // Console.WriteLine may throw here as we are logging to console on ProcessExit. + // We catch and ignore all exceptions here. Do not log to Console in thie exception handler. + catch (Exception) { } // Wait on the given reset event resetEvent.Wait(); @@ -184,4 +187,4 @@ private static async Task WaitForTokenShutdownAsync(this IWebHost host, Cancella await host.StopAsync(); } } -} \ No newline at end of file +}