在C#中,在EF和Web API中分离长时间运行的任务有哪些方法?

时间:2016-09-25 18:34:46

标签: c# asp.net-web-api

我正在向网络API提交数据。然后,我必须运行机器学习算法,该算法使用提交的所有数据,并根据扫描找到最佳参数。但是,没有理由用户必须等待此过程完成,我希望我的web api方法返回,而后端web api正在运行。异步那样做吗?或者也许Task.Run?我对C#的精彩世界相对较新。

2 个答案:

答案 0 :(得分:2)

你不会说长期任务需要多长时间。但是,在Web API的后台运行一个长时间运行的进程并不是一个好主意。大多数Web服务器都认为任务需要很短的时间,并且可以随时重启应用程序域等。

如果任务是< 90秒然后你可以考虑使用 HostingEnvironment.QueueBackgroundWorkItem

这将阻止任何类型的应用程序域重启90秒。

或者如果任务需要更长时间,那么使用某种排队方法,可能是Windows服务或HangFire。我使用Hangfire进行长时间运行的SignalR进程,以便向用户更新进程状态,并且运行良好。

答案 1 :(得分:-1)

我建议使用Task.Run,代码将在新线程中执行,而不是让用户等待。

Task.Run(() =>
{
       //Your code
});