如何在Docker容器中保持.NET Core控制台应用程序活着

我正在testing一个.NET Core 2.0应用程序,它使用Service Bus SDK从Event Hub中检索消息。 我设置了一个控制台应用程序来做到这一点,并打算作为一个Docker容器运行应用程序。

这个方法创build事件主机处理器将读取消息:

private static async Task MainAsync(string[] args) { Console.WriteLine("Registering EventProcessor..."); var eventProcessorHost = new EventProcessorHost( EhEntityPath, PartitionReceiver.DefaultConsumerGroupName, EhConnectionString, StorageConnectionString, StorageContainerName); // Registers the Event Processor Host and starts receiving messages Console.WriteLine("Retrieving messages"); await eventProcessorHost.RegisterEventProcessorAsync<EventProcessor>(); Console.WriteLine("Sleeping"); Thread.Sleep(Timeout.Infinite); } 

由于在类EventProcessor实现的事件处理器将是处理事件的处理器,所以我试图在处理器注册完成时阻止控制台应用程序退出。

但是,我找不到一个可靠的方法来保持应用程序的活着。 如果我按原样运行这个容器,我在输出窗口中看到的是:

 Registering EventProcessor... Retrieving messages Sleeping 

并没有收到消息。

感谢所有的build议。

我遵循这些文章,但最终结束了这一点,这特别适用于.NET核心应用程序:

https://github.com/aspnet/Hosting/issues/870

我已经testing了它,当它从Docker运行时接收到终止信号时,应用程序可以正常closures。

更新 :这是上面GH问题链接的相关示例:

 public class Program { public static void Main(string[] args) { var ended = new ManualResetEventSlim(); var starting = new ManualResetEventSlim(); AssemblyLoadContext.Default.Unloading += ctx => { System.Console.WriteLine("Unloding fired"); starting.Set(); System.Console.WriteLine("Waiting for completion"); ended.Wait(); }; System.Console.WriteLine("Waiting for signals"); starting.Wait(); System.Console.WriteLine("Received signal gracefully shutting down"); Thread.Sleep(5000); ended.Set(); } }