Я изучал возможность использования универсального хоста .NET для размещения консольных приложений. Похоже, что это рекомендуемый шаблон для дальнейшего развития .NET, позволяющий легко использовать DI, ведение журналов, настройку и т. д., сохраняя при этом согласованный API по сравнению с веб-приложениями ASP.NET. Я начал это отчасти понимать, когда наткнулся на этот пример от Microsoft, иллюстрирующий использование событий IHostApplicationLifetime:
Код: Выделить всё
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace AppLifetime.Example;
public class ExampleHostedService : IHostedService
{
private readonly ILogger _logger;
public ExampleHostedService(
ILogger logger,
IHostApplicationLifetime appLifetime)
{
_logger = logger;
appLifetime.ApplicationStarted.Register(OnStarted);
appLifetime.ApplicationStopping.Register(OnStopping);
appLifetime.ApplicationStopped.Register(OnStopped);
}
public Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("1. StartAsync has been called.");
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("4. StopAsync has been called.");
return Task.CompletedTask;
}
private void OnStarted()
{
_logger.LogInformation("2. OnStarted has been called.");
}
private void OnStopping()
{
_logger.LogInformation("3. OnStopping has been called.");
}
private void OnStopped()
{
_logger.LogInformation("5. OnStopped has been called.");
}
}
Я немного поигрался с этим и обнаружил, что шаблонное журналирование, в котором .NET сообщает о запуске приложения, всегда регистрируется после моего метода StartAsync. Это заставляет меня задаться вопросом: существует ли какое-либо общее руководство относительно того, когда и для чего следует использовать эти два разных шаблона (IHostApplicationLifetime.OnStarted и IHostedService.StartAsync)? Похоже, что реализация IHostedService более подробно обсуждается в документации, но мне кажется странным, что вызовы StartAsync происходят до того, как время существования хост-приложения действительно «запускается» — есть ли что-то потерянное/о чем беспокоиться из-за этого?
Подробнее здесь:
https://stackoverflow.com/questions/704 ... ervice-sta