Асинхронные задачи Net Core

avatar
Luka
15 июля 2020 в 12:34
59
2
0

У меня есть веб-API поверх net core 3.0, и мой API использует почтовую DLL, в которой я выполняю некоторые операции.

Контроллер веб-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)

avatar
Stephen Cleary
22 июля 2020 в 01:58
0

Возможно ли это с помощью Task Async и ожидания?

Нет, это не то, что async для.

Правильное решение состоит в том, чтобы записать работу (например, «отправить это сообщение на этот адрес электронной почты») в надежную очередь (например, Azure Queue/Amazon SQS/и т. д.), а затем обеспечить чтение и обработку этой очереди отдельным фоновым процессом. (например, фоновая служба ASP.NET Core / функция Azure / Amazon Lambda / и т. д.).

avatar
Peyman
15 июля 2020 в 13:18
0

Вы можете использовать фоновую очередь задач для таких работ и запускать их в фоновом режиме.

полная информация в документах Microsoft Фоновые задачи с размещенными службами в ASP.NET Core

Luka
16 июля 2020 в 06:11
0

Нельзя ли сделать с другим подходом?