如何做长时间运行的作业而不是等待ASP.NET MVC的结果?

时间:2015-05-26 09:40:06

标签: asp.net-mvc push-notification windows-services long-running-processes

如何做长时间运行的作业而不是等待ASP.NET MVC的结果? 这项工作可以发送数百万封电子邮件,发送推送通知或任何其他长时间运行的工作/流程,我们只需要知道该流程已经开始。

我已经使用Windows服务实现了该服务,该服务定期检查是否有一些要发送的电子邮件,然后执行发送例程。这在某种程度上是好的,因为它与web分开,只要有必要就可以继续执行并且非常可靠。不好的是需要定期检查是否有电子邮件要发送,并且从那个时间间隔加深了用户等待的时间。在推送通知的情况下,如果必须立即收到通知,那么这可能不是最佳解决方案。

如何在一个单独的线程中从一个用户会话调用一个方法并确保它被执行并且即使用户从站点注销它也会继续运行?

3 个答案:

答案 0 :(得分:0)

您将在此处寻找async编程。

Task.Run(() => SomeMethod(someVariable));

此处SomeMethod将异步运行。

答案 1 :(得分:0)

不要使用Web应用程序的线程来执行长时间运行的任务,因为最终会出现可伸缩性问题,因为线程数量有限。

这适用于Windows服务并将其与创建作业的应用程序分离使用队列(类似于msmq,rabbitmq,aws sqs,azure队列)。如果你说你希望它们被更快地处理,那么就会有更多的消费者加入这些队列,如果你在aws或azure上,那么你应该能够根据这些队列号进行自动扩展。

答案 2 :(得分:0)

您可能希望了解使用SignalR。它是由ASP.NET团队设计的,因此非常适应您现有的技能组合。如果可用于构建聊天窗口,多重播放用户游戏等内容,或者在您的情况下,请监视远程服务器(即Azure)上发生的长时间运行过程。

http://signalr.net/

https://blog.safaribooksonline.com/2014/02/06/server-side-signalr/