Web API,从控制器操作异步调用进程

时间:2014-11-13 18:02:13

标签: asp.net-mvc asp.net-web-api

我需要异步调用来自Web API控制器操作的进程,因此操作不会等待进程完成返回。这是怎么做到的?我试图避免编写消息队列。

这是我要做的事情的一个例子

 public JsonResult Index(string key)
 {
     //call some process here but don't wait for it to finish, 
     //this would be something like logging or sending an email

     // this returns immediately
     return new JsonResult
     {
        ...
      };

 }

3 个答案:

答案 0 :(得分:1)

Task.Run()ThreadPool.QueueUserWorkItem()

对于日志记录,如果使用log4net,则可能需要编写异步日志追加器。对于电子邮件,我会考虑使用drop目录并让SMTP服务器异步接收邮件。这两种方法都可以消除控制器操作的复杂性,并将其本地化到您正在使用的组件中。

答案 1 :(得分:1)

如果您有可能丢失后台工作,可以使用Task.Run()。如果重要,请使用QueueBackgroundWorkItem。有关详细信息,请查看此内容。

http://blogs.msdn.com/b/webdev/archive/2014/06/04/queuebackgroundworkitem-to-reliably-schedule-and-run-long-background-process-in-asp-net.aspx

答案 2 :(得分:1)

您还可以查看后台作业计划程序,例如hangfireQuartz.net

以下是关于这些解决方案的精彩博客文章。

How to run Background Tasks in ASP.Net