我有以下带有async
和await
关键字的操作方法:
[HttpPost]
public async Task<ActionResult> Save(ContactFormViewModel contactFormVM)
{
if (domain.SaveContactForm(contactFormVM) > 0)// saves data in database
{
bool result = await SendMails(contactFormVM);//need to execute this method asynchronously but it executes synchronously
return Json("success");
}
return Json("failure");
}
public async Task<bool> SendMails(ContactFormViewModel contactFormVM)
{
await Task.Delay(0);//how to use await keyword in this function?
domain.SendContactFormUserMail(contactFormVM);
domain.SendContactFormAdminMail(contactFormVM);
return true;
}
在上面的代码中,一旦数据库操作完成,我希望立即返回Json()
结果,然后调用应该在后台执行的SendMails()
方法。我应该对上面的代码进行哪些更改?
发布于 2015-04-01 05:43:09
等待运算符应用于异步方法中的任务,以挂起该方法的执行,直到等待的任务完成。该任务代表正在进行的工作。
听起来您不想等待SendMails的结果。可以将async和await看作是使用异步API的工具。具体地说,能够“等待”“异步”任务的结果真的很有用。然而,如果你不关心“异步”(例如SendMails)任务的结果,那么你就不需要“等待”结果(即布尔值)。
相反,您可以简单地使用Task.Run来调用异步任务。
[HttpPost]
public async Task<ActionResult> Save(ContactFormViewModel contactFormVM) {
if (domain.SaveContactForm(contactFormVM) > 0) {// saves data in database
Task.Run(() => SendMails(contactFormVM));
return Json("success");
}
return Json("failure");
}
public void SendMails(ContactFormViewModel contactFormVM) {
domain.SendContactFormUserMail(contactFormVM);
domain.SendContactFormAdminMail(contactFormVM);
}
https://stackoverflow.com/questions/29383116
复制相似问题