При получении почты через MailGun им требуется ответ в течение ограниченного времени. У меня есть две проблемы с этим:
1) После получения сообщения мне нужно обработать и записать его в CRM, что занимает некоторое время. Это приводит к истечению времени ожидания MailGun, прежде чем я получу ответ. Затем MailGun отправляет сообщение снова и снова, поскольку время ожидания истекает.
2) Сообщение MailGun не асинхронное, но вызовы API для моего CRM являются асинхронными.
Итак, мне нужно отправить MailGun ответ 200, а затем продолжить обработку сообщения. И этот процесс должен быть в асинхронном режиме.
В приведенном ниже коде показано, что я хочу, чтобы произошло. Я пытался использовать задачи и не мог заставить его работать. Бывают случаи, когда за один раз может приходить много электронных писем (например, при инициализации чьей-либо учетной записи), если для решения требуются какие-то параллельные задачи или потоки, ему нужно будет обрабатывать многие из них.
public class HomeController : Controller
{
[HttpPost]
[Route("mail1")]
public ActionResult Mail()
{
var emailObj = MailGun.Receive(Request);
return Content("ok");
_ = await CRM.SendToEmailApp(emailObj);
}
}
Спасибо запомощь!