Как вернуть представление в ожидании функции ожидания в MVC - PullRequest
0 голосов
/ 22 января 2019

Я работаю с функцией ожидания отправки электронной почты. Есть ли какие-либо решения, как отобразить страницу или вернуть представление () в ожидании завершения функции ожидания.

Вот мой код:

 using (var smtp = new SmtpClient())
                {
                    var credential = new NetworkCredential
                    {
                        UserName = "email@gmail.com",
                        Password = "paswordEmail"
                    };
                    smtp.Credentials = credential;
                    smtp.Host = "smtp-mail.outlook.com";
                    smtp.Port = 587;
                    smtp.EnableSsl = true;
                    await smtp.SendMailAsync(message); //Here is my await function for sending an email
                    return RedirectToAction("ThankYou"); //This thank you page. I want to display this html page without waiting for await complete
                }

Ответы [ 2 ]

0 голосов
/ 22 января 2019

ASP.NET имеет собственную функцию для выполнения фоновой работы: HostingEnvironment.QueueBackgroundWorkItem Method .

Просто опубликуйте свою работу там:

HostingEnvironment.QueueBackgroundWorkItem(
    async () =>
    {
        using (var smtp = new SmtpClient
            {
                Host = "smtp-mail.outlook.com",
                Port = 587,
                EnableSsl = true,
                Credentials = new NetworkCredential
                {
                    UserName = "email@gmail.com",
                    Password = "paswordEmail",
                },
            })
        {
            await smtp.SendMailAsync(message); //Here is my await function for sending an email
        }
    });
return RedirectToAction("ThankYou"); 
0 голосов
/ 22 января 2019

Вы можете обернуть почтовый код в Task.Run и не ждать его.

Task.Run(async () => {
    using (var smtp = new SmtpClient()) {
        var credential = new NetworkCredential {
            UserName = "email@gmail.com",
            Password = "paswordEmail"
        };
        smtp.Credentials = credential;
        smtp.Host = "smtp-mail.outlook.com";
        smtp.Port = 587;
        smtp.EnableSsl = true;
        await smtp.SendMailAsync(message); //Here is my await function for sending an email
    }
});
return RedirectToAction("ThankYou"); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...