![]() |
1
0
我相信期望的行为不是应该在控制器内完成的事情。
上述抽象可以使用框架实现并注入控制器中。
在上述场景中,控制器的唯一任务是对作业进行排队。 现在,在这一方面的问题上,我将重点放在问题的主要部分。 正如其他人已经提到的,有很多方法可以实现所期望的行为。 一个简单的内存实现看起来像
它利用异步事件处理程序在添加作业时按顺序处理队列。
这个
像在
或者,如果需要的话,通过公开一个端点来手动操作。 |
![]() |
2
1
我将在更高的层次上研究您的体系结构,执行“长时间运行的任务”(如打印)可能完全不在您的WebAPI过程中。 如果我们自己这样做,我会: 创建一个包含所有打印逻辑的Windows服务(或您拥有的服务),然后控制器的任务就是通过HTTP或某种队列msmq、rabbitmq、servicebus等与该服务进行对话。 如果通过HTTP,那么服务应该在内部对打印作业进行排队,并尽快(在打印发生之前)将200/201返回到控制器,以便控制器能够高效地返回到客户机并释放其资源。 如果通过排队技术,那么控制器应该在队列上放置一条消息,然后尽快返回200/201,然后服务可以以自己的速率读取消息,并一次打印一条消息。 这样做可以减少API的开销,并且在WebAPI失败的情况下也可以减少打印作业的丢失(如果API崩溃,任何后台线程都可能/将受到影响)。另外,如果在某人打印时进行部署,打印作业很可能会失败。 我的2美分价值 |