Когда мне следует использовать событие IHostApplicationLifetime.OnStarted вместо IHostedService.StartAsync?C#

Место общения программистов C#
Ответить
Anonymous
 Когда мне следует использовать событие IHostApplicationLifetime.OnStarted вместо IHostedService.StartAsync?

Сообщение Anonymous »

Я изучал возможность использования универсального хоста .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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»