网络核心异步任务

时间:2020-07-15 12:34:33

标签: asynchronous .net-core async-await

我有一个基于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。

谢谢

2 个答案:

答案 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 /等)。