Не уверен, сколько раз и какой именно метод вы хотите вызвать. Если вы хотите запустить некоторые асинхронные фоновые задания, вы можете использовать IHostedService. Вам потребуется установить Microsoft.Extensions.Hosting пакет NuGet или Microsoft.AspNetCore.App metapackage .
Использование:
Добавить эту строку в ваш Startup.cs
services.AddHostedService<LogBackgroundService>(); //service is instance of IServiceCollection
И это реализация вашего фонового сервиса:
public class LogBackgroundService : IHostedService
{
public async Task StartAsync(CancellationToken cancellationToken)
{
await QuickLog.AsyncConsumer(); // or whatever you want to call
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
}
Поведение:
Он будет запущен один раз (но IHostedService все еще будет Если вы хотите уменьшить потребление ресурсов, просто позвоните StopAsync()
, когда это будет сделано). Если вы хотите запустить что-то в al oop, вы можете реализовать это:
while (!cancellationToken.IsCancellationRequested)
{
await QuickLog.AsyncConsumer();
await Task.Delay(250, cancellationToken); // you can add this if you want to throttle
}
PS. Если вам нужно запустить несколько приложений IHostedServices в вашем приложении, не блокируя друг друга, вам нужно будет обернуть свои методы в Tasks
:
public Task StartAsync(CancellationToken cancellationToken)
{
Task.Run(() => QuickLog.AsyncConsumer(), cancellationToken);
}