C# WebApi如何在向用户返回响应后发送异步电子邮件?

C# WebApi如何在向用户返回响应后发送异步电子邮件?,c#,asp.net,asynchronous,asp.net-web-api,smtp,C#,Asp.net,Asynchronous,Asp.net Web Api,Smtp,电子邮件发送时间太长(有时长达7-8秒) 我想将回复发送回我的客户,而不需要他们等待电子邮件发送。这可能吗 public async Task<IHttpActionResult> Action() { //Do something await email.sendAsync(); //Can take up to 10 seconds... return Ok(); } 公共异步任务操作() { //做点什么 等待电子邮件。sendAsync();//最长可能需要10

电子邮件发送时间太长(有时长达7-8秒)

我想将回复发送回我的客户,而不需要他们等待电子邮件发送。这可能吗

public async Task<IHttpActionResult> Action()
{
  //Do something
  await email.sendAsync(); //Can take up to 10 seconds...
  return Ok();
}
公共异步任务操作()
{
//做点什么
等待电子邮件。sendAsync();//最长可能需要10秒。。。
返回Ok();
}
我可以删除wait,但我显然在异步操作仍处于挂起状态时完成了一个
异步模块或处理程序


我如何才能做到这一点?

理想情况下,您希望将此工作转移到其他进程上,可能是一个队列,然后让一些订阅者从该队列中发送电子邮件,但这是一项大量的工作,我们生活在现实世界中

你可以用

HostingEnvironment.QueueBackgroundWorkItem(ct => email.sendAsync()); 

让一些非常可靠的东西启动并运行。

理想情况下,您希望将此工作转移到其他进程上,可能是一个队列,然后让一些订阅者进程离开该队列发送电子邮件,但这是一项大量工作,我们生活在现实世界中

你可以用

HostingEnvironment.QueueBackgroundWorkItem(ct => email.sendAsync()); 

让一些非常可靠的东西启动并运行。

这是正确的建议。为了扩展,您通常不希望您的web服务器资源被后台线程占用。通常,您希望它们能够非常可伸缩,以处理尽可能多的请求。实现这一点的一种方法是将电子邮件数据放入服务总线队列,然后让工作服务器在其他地方弹出队列中的内容,并尽可能地进行处理。通过这种方式,您可以立即从API响应。这是正确的建议。为了扩展,您通常不希望您的web服务器资源被后台线程占用。通常,您希望它们能够非常可伸缩,以处理尽可能多的请求。实现这一点的一种方法是将电子邮件数据放入服务总线队列,然后让工作服务器在其他地方弹出队列中的内容,并尽可能地进行处理。通过这种方式,您可以立即从API作出响应。