我有一个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
,它不会发送电子邮件。
有其他同时发送电子邮件的方式吗?
答案 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);
}
由于该函数实际上没有等待任何内容,因此无需使用异步标记它。只需返回任务即可。