プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2019/11/07

ASP.NET Core アプリのシャットダウンを行う

event_note2019/11/07 10:03

ASP.NET Core で作成したアプリケーションを終了する方法です。

以下の公式ドキュメントに方法が書いてあります。

IHostApplicationLifetime インターフェイスを使います。

環境

  • Visual Studio 2017
  • ASP.NET Core 2.2

シャットダウンの実行

シャットダウンを開始したいクラスのコンストラクタで IHostApplicationLifetime を記述して DI します。

シャットダウンを実行するには、IHostApplicationLifetimeStopApplication をコールします。

公式ドキュメントのサンプルそのままですが、以下のような感じです。

public class MyClass
{
    private readonly IHostApplicationLifetime _appLifetime;

    public MyClass(IHostApplicationLifetime appLifetime)
    {
        _appLifetime = appLifetime;
    }

    public void Shutdown()
    {
        _appLifetime.StopApplication();
    }
}

起動時とシャットダウン時の処理を定義する

IHostApplicationLifetime インターフェイスでは、起動時とシャットダウン時に実行する処理を登録できます。

Startup.csConfigure メソッドで IHostApplicationLifetime に対して以下のようにメソッドを登録します。

public class Startup
{
    public void Configure(
        IApplicationBuilder app,
        IHostApplicationLifetime appLifetime)
    {
        appLifetime.ApplicationStarted.Register(OnStarted);
        appLifetime.ApplicationStopping.Register(OnStopping);
        appLifetime.ApplicationStopped.Register(OnStopped);
    }

    void OnStarted()
    {
        // ホストが完全に起動されたときに実行する処理を記述する
    }

    void OnStopping()
    {
        // ホストがシャットダウンを行っているときに実行する処理を記述する
    }

    void OnStopped()
    {
        // ホストがシャットダウンを完了したときに実行する処理を記述する
    }
}