Ответ
Да, создавал различные типы сервисов для выполнения фоновых задач и длительных операций.
1. Фоновые сервисы в ASP.NET Core (BackgroundService): Идеально для задач внутри веб-приложения: отправка email, обработка очередей, кэширование.
public class TimedHostedService : BackgroundService
{
private readonly ILogger<TimedHostedService> _logger;
private readonly IServiceScopeFactory _scopeFactory;
public TimedHostedService(ILogger<TimedHostedService> logger, IServiceScopeFactory scopeFactory)
{
_logger = logger;
_scopeFactory = scopeFactory;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
_logger.LogInformation("Timed Hosted Service running.");
using PeriodicTimer timer = new(TimeSpan.FromSeconds(5));
try
{
while (await timer.WaitForNextTickAsync(stoppingToken))
{
await using (var scope = _scopeFactory.CreateAsyncScope())
{
var scopedProcessor = scope.ServiceProvider
.GetRequiredService<IScopedProcessingService>();
await scopedProcessor.DoWorkAsync(stoppingToken);
}
}
}
catch (OperationCanceledException)
{
_logger.LogInformation("Timed Hosted Service is stopping.");
}
}
}
// Регистрация в Program.cs: builder.Services.AddHostedService<TimedHostedService>();
2. Windows Services (ранее NT Services): Для автономных служб, работающих под управлением Windows Service Control Manager (SCM).
using System.ServiceProcess;
public class MyWindowsService : ServiceBase
{
private BackgroundWorker _worker;
protected override void OnStart(string[] args)
{
_worker = new BackgroundWorker();
_worker.DoWork += (s, e) => { /* Долгая фоновая работа */ };
_worker.RunWorkerAsync();
}
protected override void OnStop()
{
_worker?.CancelAsync();
// Освобождение ресурсов
}
}
// Установка через sc.exe create "MyService" binPath="путь_к_exe"
3. Современные альтернативы:
- Hangfire / Quartz.NET: Для сложного планирования фоновых заданий.
- Azure Functions / AWS Lambda: Для бессерверного выполнения задач.
- Worker Services в .NET: Шаблон для создания длительно работающих служб с поддержкой контейнеризации (Docker).
Ключевые аспекты: устойчивость к ошибкам, корректное логирование, поддержка graceful shutdown и конфигурируемость.