我有一个基于net core 3.0的Web API,并且我的API使用的是我执行一些操作的邮件DLL。
Web API控制器:
_mailService.SendEmail();
邮件DLL:
public void SendEmail()
{
Console.Writeline("Registering at database");
RegisterAtDatabase(); //Do some stuff at database
SendMailToUser(); //Send mail to user. His operation takes about 1 minute
Console.Writeline("End mail proccess");
}
private void SendMailToUser()
{
Console.Writeline("Creating and sending mail");
//Here some stuff to send the mail. It takes about 1 minute
Console.Writeline("Mail sended");
}
我想调用_mailService.SendEmail()而不是等待整个过程。我想写在数据库上,而不是等待电子邮件发送过程。所以控制台输出应该是...
Registering at database
Creating and sending mail
End mail proccess
//After 1 minute
Mail sended
可以使用Task Async并以某种方式等待吗?
我想在发送电子邮件时将控件返回给API。
谢谢
答案 0 :(得分:0)
您可以将后台任务队列用于此类工作,并在后台运行它们。
Microsoft文档Background tasks with hosted services in ASP.NET Core上的完整信息
答案 1 :(得分:0)
可以使用Task Async并以某种方式等待吗?
否,that's not what async
is for。
正确的解决方案是将工作(例如,“将此消息发送到此电子邮件地址”)写入可靠的队列(例如,Azure Queue / Amazon SQS等),然后分别读取和处理后台流程该队列(例如,ASP.NET Core后台服务/ Azure函数/ Amazon Lambda /等)。