diff --git a/Vostok.Hosting/PublicAPI/net6.0/PublicAPI.Shipped.txt b/Vostok.Hosting/PublicAPI/net6.0/PublicAPI.Shipped.txt index 7e061a31..934ed2c8 100644 --- a/Vostok.Hosting/PublicAPI/net6.0/PublicAPI.Shipped.txt +++ b/Vostok.Hosting/PublicAPI/net6.0/PublicAPI.Shipped.txt @@ -596,6 +596,7 @@ Vostok.Hosting.VostokHost Vostok.Hosting.VostokHost.StartAsync(Vostok.Hosting.Models.VostokApplicationState? stateToAwait = 5) -> System.Threading.Tasks.Task Vostok.Hosting.VostokHost.StopAsync(bool ensureSuccess = true) -> System.Threading.Tasks.Task Vostok.Hosting.VostokHost.VostokHost(Vostok.Hosting.VostokHostSettings settings) -> void +Vostok.Hosting.VostokHost.RegisterSigtermCancellation() -> Vostok.Hosting.VostokHost Vostok.Hosting.VostokHost_Extensions Vostok.Hosting.VostokHostingEnvironmentFactory Vostok.Hosting.VostokHostingEnvironmentFactorySettings diff --git a/Vostok.Hosting/PublicAPI/netstandard2.0/PublicAPI.Shipped.txt b/Vostok.Hosting/PublicAPI/netstandard2.0/PublicAPI.Shipped.txt index c3ad1bbf..128ce3ec 100644 --- a/Vostok.Hosting/PublicAPI/netstandard2.0/PublicAPI.Shipped.txt +++ b/Vostok.Hosting/PublicAPI/netstandard2.0/PublicAPI.Shipped.txt @@ -593,6 +593,7 @@ Vostok.Hosting.VostokHost Vostok.Hosting.VostokHost.StartAsync(Vostok.Hosting.Models.VostokApplicationState? stateToAwait = 5) -> System.Threading.Tasks.Task Vostok.Hosting.VostokHost.StopAsync(bool ensureSuccess = true) -> System.Threading.Tasks.Task Vostok.Hosting.VostokHost.VostokHost(Vostok.Hosting.VostokHostSettings settings) -> void +Vostok.Hosting.VostokHost.RegisterSigtermCancellation() -> Vostok.Hosting.VostokHost Vostok.Hosting.VostokHost_Extensions Vostok.Hosting.VostokHostingEnvironmentFactory Vostok.Hosting.VostokHostingEnvironmentFactorySettings @@ -665,4 +666,4 @@ Vostok.Hosting.VostokHostShutdown Vostok.Hosting.VostokHostShutdown.Initiate() -> void Vostok.Hosting.VostokHostShutdown.IsInitiated.get -> bool Vostok.Hosting.VostokHostShutdown.Source.get -> System.Threading.CancellationTokenSource -Vostok.Hosting.VostokHostShutdown.VostokHostShutdown(System.Threading.CancellationTokenSource source) -> void +Vostok.Hosting.VostokHostShutdown.VostokHostShutdown(System.Threading.CancellationTokenSource source) -> void \ No newline at end of file diff --git a/Vostok.Hosting/VostokHost.cs b/Vostok.Hosting/VostokHost.cs index fd1b9f21..4b1529ba 100644 --- a/Vostok.Hosting/VostokHost.cs +++ b/Vostok.Hosting/VostokHost.cs @@ -1,5 +1,8 @@ using System; using System.Diagnostics; +#if NET6_0_OR_GREATER +using System.Runtime.InteropServices; +#endif using System.Threading; using System.Threading.Tasks; using JetBrains.Annotations; @@ -51,6 +54,9 @@ public class VostokHost private volatile Task workerTask; private volatile VostokHostingEnvironment environment; private volatile ILog log; +#if NET6_0_OR_GREATER + private volatile PosixSignalRegistration sigtermRegistration; +#endif public VostokHost([NotNull] VostokHostSettings settings) { @@ -158,6 +164,29 @@ public Task StopAsync(bool ensureSuccess = true) return resultTask; } + +#if NET6_0_OR_GREATER + /// + /// Listen and shutdown VostokHost if received. + /// +#else + /// + /// Listen and shutdown VostokHost if SIGTERM received. + /// +#endif + public VostokHost RegisterSigtermCancellation() + { +#if NET6_0_OR_GREATER + sigtermRegistration = PosixSignalRegistration.Create(PosixSignal.SIGTERM, ctx => + { + ctx.Cancel = true; + this.Stop(false); + }); +#else + AppDomain.CurrentDomain.ProcessExit += (_, _) => this.Stop(false); +#endif + return this; + } private async Task RunInternalAsync() { diff --git a/Vostok.Hosting/VostokHost_Extensions.cs b/Vostok.Hosting/VostokHost_Extensions.cs index a722a063..07718923 100644 --- a/Vostok.Hosting/VostokHost_Extensions.cs +++ b/Vostok.Hosting/VostokHost_Extensions.cs @@ -1,5 +1,4 @@ using System; -using System.Runtime.InteropServices; using JetBrains.Annotations; using Vostok.Hosting.Models; @@ -49,27 +48,8 @@ public static VostokHost WithConsoleCancellation([NotNull] this VostokHost vosto return vostokHost; } -#if NET6_0_OR_GREATER - /// - /// Listen and shutdown VostokHost if received. - /// -#else - /// - /// Listen and shutdown VostokHost if SIGTERM received. - /// -#endif - public static VostokHost WithSigtermCancellation([NotNull] this VostokHost vostokHost) - { -#if NET6_0_OR_GREATER - PosixSignalRegistration.Create(PosixSignal.SIGTERM, ctx => - { - ctx.Cancel = true; - vostokHost.Stop(false); - }); -#else - AppDomain.CurrentDomain.ProcessExit += (_, _) => vostokHost.Stop(false); -#endif - return vostokHost; - } + [Obsolete("Use VostokHost.RegisterSigtermCancellation instead of this")] + public static VostokHost WithSigtermCancellation([NotNull] this VostokHost vostokHost) => + vostokHost.RegisterSigtermCancellation(); } } \ No newline at end of file