同时发送多封电子邮件

时间:2018-10-07 03:27:02

标签: c# asp.net-web-api2 quartz.net

我有一个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 :(得分:0)

假设SendEmailAsync返回一个Task派生的结果,请使用Task.WhenAll一起运行所有任务。

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

由于该函数实际上没有等待任何内容,因此无需使用异步标记它。只需返回任务即可。