在单独的后台线程与进程中运行长时间后台任务

时间:2017-08-28 08:17:59

标签: c# asp.net multithreading asp.net-core-1.0

我正在构建一个ASP.NET Core Web应用程序,我需要运行一些复杂的任务,需要花费很长时间才能完成,从几秒到几分钟。用户不必等到完成任务运行,但有时我需要根据任务的进度更新UI。我正在考虑在ASP.NET服务器中处理这两种方法:一种是使用后台线程,另一种是使用单独的进程。我不希望长时间运行的任务以任何方式妨碍Web应用程序。与进程相比,使用线程是一种安全的选择吗?或者在一个单独的过程中运行这些任务是一种更好,更有效的方法吗?

2 个答案:

答案 0 :(得分:4)

我会说在另一个过程中这样做。将它放在一个队列中,并有一个单独的进程处理该队列,并在完成时通过发布作业完成消息或其他信号来通知Web应用程序。

如果您在网络应用程序中使用常规线程,并且服务器在流程中间关闭,或者Web应用程序被回收,您可能会受到一些不良影响。

概述了其他一些选项here

答案 1 :(得分:0)

你应该以不同的方式思考,在这种情况下总是考虑像signalR这样的实时通知方法,你可以通过它来解雇你的请求而你不必再担心它了,一旦它完成它会发出你的应用程序的信号,你会可以访问您可以根据您的业务操作的所有数据。请访问此链接以获取更多信息An Introduction to SignalR