2016-09-12 6 views
0

私はasp.netコアアプリケーション(フレームワークnet46)内でAKKA.NETアクターシステムを実行しています。私は「DOTNETの実行」を実行して、コマンドプロンプトからWebアプリケーションを実行し、私はCtrl + Cキーを使用して、それを終了しようとしたとき、私は次のように出力し、そこプロンプトハングを取得:AKKA.NETアクターシステムがasp.netコアアプリケーションで正しくシャットダウンされない

   c:\D3\>19:05:33.7024266 ENV=d0 Sdm.Web DEBUG Akka.Actor.Internal.ActorSystemImpl Disposing system 
      19:05:33.7084292 ENV=d0 Sdm.Web DEBUG Akka.Actor.Internal.ActorSystemImpl System shutdown initiated 
      [DEBUG][12/09/16 19:05:33][Thread 0023][EventStream] subscribing [akka://all-systems/] to channel Akka.Event.Debug 
      19:05:33.7134423 ENV=d0 Sdm.Web DEBUG Akka.Actor.GuardianActor Stopping 
      [DEBUG][12/09/16 19:05:33][Thread 0023][EventStream] subscribing [akka://all-systems/] to channel Akka.Event.Info 
      [DEBUG][12/09/16 19:05:33][Thread 0023][EventStream] subscribing [akka://all-systems/] to channel Akka.Event.Warning 
      [DEBUG][12/09/16 19:05:33][Thread 0023][EventStream] subscribing [akka://all-systems/] to channel Akka.Event.Error 

私は別のCtrlキーをヒットした場合-c終了します。しかしそれは正しいとは思わない。

私は、アクターシステム(シングルトンスコープ)のライフタイムを管理するために依存性注入コンテナを使用しています。したがって、アプリケーションシャットダウン時に実際にコンテナがオブジェクトを破棄しようとしていると仮定します。

誰かが間違っていると思われることはありますか?

答えて

1

正常にシャットダウンするには、Akka.NETアクタを直接停止する必要があります。そうするIApplicationLifetimeインタフェースを介してASP.NETコアによって提供されるアプリケーションのシャットダウンイベントを使用します。詳細については

protected void DisposeResources() 
{ 
    //Cleanup stuff when the app is shutting down 
} 

public void Configure(IApplicationBuilder app, IApplicationLifetime applicationLifetime) 
{ 
    //register the application shutdown handler 
    applicationLifetime.ApplicationStopping.Register(DisposeResources); 
} 

IApplicationLifetimeのインスタンスを取得

CancellationToken ApplicationStopping { get; } 
CancellationToken ApplicationStopped { get; } 

Configure方法でStartup.cs中に行うことができます詳細はASP.NET Core application shutdown events となりますので、この質問Kestrel shutdown function in Startup.cs in ASP.NET Core

+0

をご覧ください。それを試して、それがどのように行くかを教えてくれます。 –

関連する問題