Я пытаюсь запустить фоновую задачу по запросу всякий раз, когда я получаю определенный запрос от моей конечной точки api. Все, что нужно сделать, - это отправить электронное письмо с задержкой на 30 секунд. Так что я подумал, что BackgroundService
подойдет. Но проблема в том, что, похоже, BackgroundService
в основном предназначен для повторяющихся задач, а не для выполнения по запросу в соответствии с этим ответом .
Итак, какие еще альтернативы у меня есть, я надеюсь, что нет полагаться на сторонние библиотеки, такие как Hangfire? Я использую asp. net core 3.1.
Это моя фоновая служба.
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace ProjectX.Services {
public class EmailOfflineService : BackgroundService {
private readonly ILogger<EmailOfflineService> log;
private readonly EmailService emailService;
public EmailOfflineService(
ILogger<EmailOfflineService> log,
EmailService emailService
) {
this.emailService = emailService;
this.log = log;
}
protected async override Task ExecuteAsync(CancellationToken stoppingToken)
{
log.LogDebug("Email Offline Service Starting...");
stoppingToken.Register(() => log.LogDebug("Email Offline Service is stopping."));
while(!stoppingToken.IsCancellationRequested)
{
// wait for 30 seconds before sending
await Task.Delay(1000 * 30, stoppingToken);
await emailService.EmailOffline();
// End the background service
break;
}
log.LogDebug("Email Offline Service is stoped.");
}
}
}