Отправить несколько писем одновременно - PullRequest
0 голосов
/ 07 октября 2018

У меня есть проект WebApi со списком запланированных электронных писем с использованием Quartz.Net (встроенный, а не сервис Windows), который запланирован ежедневно в 9 часов утра.Я хочу, чтобы это было одновременно.Поэтому я добавил QueueBackgroundWorkItem.

public override async Task ExecuteJob(IJobExecutionContext context)
{
    foreach (var user in users)
    {
        HostingEnvironment.QueueBackgroundWorkItem(ct =>  EmailHelper.SendEmailAsync("reminder",user.email));
    }
}

Однако задание выполнено, но оно не отправляет электронное письмо, если я включил QueueBackgroundWorkItem.

Любой альтернативный способ одновременной отправки электронной почты

1 Ответ

0 голосов
/ 07 октября 2018

Предполагая, что SendEmailAsync возвращает Task производный результат, используйте Task.WhenAll для запуска всех задач вместе.

public override Task ExecuteJob(IJobExecutionContext context) {
    var tasks = users.Select(user => EmailHelper.SendEmailAsync("reminder", user.email));
    return Task.WhenAll(tasks);
}

Поскольку в функции ничего не ожидается, нет необходимости отмечать тегомэто с асинхронным.Просто верните задание.

...