Я создал приложение-контейнер для шаблона проекта kubernetes. Я хочу запустить там службу, которая слушает сообщения и работает в бесконечном l oop. Исполняю из Configure
метода Startup.cs
. Судя по некоторым ссылкам, это место для этого. Перед этим я регистрирую все службы в методе ConfigureServices
, как обычное приложение asp. net. Кроме того, я хочу использовать IApplicationLifetime.ApplicationStopping для запуска. Я не нашел способа достичь обоих: выполнить код слушателя задач и управлять обратным вызовом ApplicationStopping. это мой Configure
метод
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
var cancellationToken = new CancellationTokenSource();
var tasksListener = app.ApplicationServices.GetRequiredService<ITaskListener>();
var appLifetime = app.ApplicationServices.GetRequiredService<IApplicationLifetime>();
appLifetime.ApplicationStopping.Register(() =>
{
Console.WriteLine("ApplicationStopping is stopping");
});
tasksListener.Listen(cancellationToken.Token).Wait();
app.Run(async (context) =>
{
await tasksListener.Listen(cancellationToken.Token);
});
}
Я могу остановить приложение и увидеть печать, но код внутри app.Run
не выполняется. Если я переключу этот код:
app.Run(async (context) =>
{
await tasksListener.Listen(cancellationToken.Token);
});
на это:
tasksListener.Listen(cancellationToken.Token).Wait();
, код будет выполнен, но тогда IApplicationLifetime.ApplicationStopping не будет выполняться. Есть идеи?