2

我正在一个更大的网站上工作,我想让程序的“长时间运行”部分在单独的线程上运行。但是我对如何实现这一点感到有些不知所措,尽管我会问是否有人解决了类似的问题。我想要这样做的原因是因为我向用户发送电子邮件,并且在发送电子邮件之前有很多数据库查找,当这一切发生时,没有必要锁定用户。还有其他一些情况,我想等待一些时间发送电子邮件,以防有更多电子邮件要发送,然后合并它们。

我想到了两种方法来做到这一点:

  1. 有一个在应用程序状态下启动的线程运行,然后将运行后端处理。这将使我能够将对象直接发送到线程。
  2. 让一个程序在旁边运行,并通过我数据库中的一个表向它发送数据。
4

2 回答 2

3

使用后台进程来完成任何需要做的繁重工作。不要在您的操作方法中执行此操作,也不要从您的操作方法中生成线程来完成工作:如果您同时获得大量活动,则可能会生成许多线程。

如果可以,我建议您使用 Windows 服务来执行后台任务。这样,如果需要,它可以在您的 Web 应用程序之外的另一台计算机上运行。

使用数据库来存储有关要完成的后台工作的信息,但不要将数据库表用作“工作队列”。为此使用适当的队列:

  • 亚马逊 SQS
  • Azure 消息总线
  • 兔MQ

因此,您的操作方法会将后台任务所需的数据放入您的数据库中,然后会在您的队列上推送一条消息,说要完成这项工作。您的后台任务会将消息从队列中弹出并访问数据库以获取工作数据。

看:

于 2013-05-26T16:17:14.440 回答
1

我建议将“工作”保存到数据库中,然后运行一项服务或工作来接手工作并完成工作。从安全的角度来看,这样做会更好,并且您不会在尝试在 IIS 工作线程中执行长时间运行的任务时遇到问题。

在 IIS 中管理后台线程有哪些最佳实践?

于 2013-05-26T15:53:11.483 回答