2016-11-22 6 views
8

は正常にシャットダウンa DOTNET COREアプリケーションはDOCKERで動作していますか?はいの場合は、どのイベントを聞く必要がありますか?dockerでdotnetを正常にシャットダウンするにはどうすればよいですか?

私が欲しいのはキャンセル要求ですキャンセルトークンを現在の方法に渡して、作業中にシャットダウンを延期したいと思います。 DOTNETコアではなく、一般的な情報

がUPDATE この質問は、私は即座にdocker container exits immediately even with Console.ReadLine() in a .net core console applicationの重複がないよされていないために関連するその他のサンプルコード、参照リンクをお探し

出口の問題。 Windows.SystemsEvents.SessionEndingのようなイベントにアクセスし、Console.CancelKeyPressに頼るか、またはWebHostBuilder()を実装することは、請求書に適合しない場合があります。

+0

これはおそらく? http://shazwazza.com/post/aspnet-core-application-shutdown-events/ – DavidG

+0

[System.Runtime.Loader.AssemblyLoadContext.Default.Unloading](http://www.michael-whelan.net/replacing-appdomain) -in-dotnet-core /) – stuartd

+0

@DavidGは** DOTNET CORE **を探しています** ASP.NET CORE **では 'IApplicationLifetime'はありませんが、お時間をいただきありがとうございます! – cilerler

答えて

3

System.Consoleには、CancelKeyPressというイベントがあります。私はこれがsigintイベントがdotnetに渡されたときに起動されると考えています。

System.Console.CancelKeyPress += (s,e) => { /* do something here */}; 
1

2.0.0-preview2-006497を使用して、私はいくつかのテストをした、とドッカーがコンテナにSIGTERM/SIGINTを送信するときに、今AssemblyLoadContext.Default.Unloadingが発射されます。

System.Runtime.Loader.AssemblyLoadContext.Default.Unloading += ctx => 
{ 
    // code here... 
}; 

はまた、いくつかの詳細については、この問題を参照してください:.NETのコア2.0ではhttps://github.com/aspnet/Hosting/issues/870

+0

ここに通知してくれてありがとう、私はそれをテストし、あなたに知らせる... – cilerler

3

、あなたがドッカーでLinux上で正常に動作しますAppDomain.CurrentDomain.ProcessExitイベントを、使用することができます

例のコードは次のようになります。 AssemblyLoadContext.Default.Unloadingはおそらく.NET Core 2.0より前でも動作します。

関連する問題