【问题标题】:Threads/WebServices in WebserverWeb服务器中的线程/WebServices
【发布时间】:2014-02-26 22:42:15
【问题描述】:

我想知道在服务器中创建后台任务以发送电子邮件的最佳方式。

这个想法是一个人出价一个项目,这会自动向负责的任务发送一封邮件,然后将邮件发送给通讯员,但是我怎样才能在不影响网站功能或使其变慢的情况下做到这一点。

我已经阅读了一些关于异步任务的内容,但不确定这是否能解决我的问题。

【问题讨论】:

标签: c# asp.net .net multithreading scheduled-tasks


【解决方案1】:

可以创建异步后台线程,看看用法 如果您使用的是 .NET 4.x,则为 .NET 框架任务类,在早期版本中 您必须查看 Thread 或 ThreadStart。 但要小心访问数据,以防止主线程和您的电子邮件 线程陷入问题,您还需要查看锁定资源 使用“锁定”语句。

这很好,如果您需要一次性发送多封电子邮件并且应该这样做 异步,这意味着“用户不必等待它”。 在网络中,这也是在线程中执行此类操作的最佳方式,因为您 如果花费的时间太长,可能会导致请求超时。 但是,当然,在线程结束时,您应该以某种方式创建一个报告 并将其发送给执行用户,以便他知道邮件已完成 或者如果发生任何错误。

我们公司通过创建一个负责的网络服务解决了这个问题 用于将电子邮件发送到 SMTP 服务并记录它们,包括内容和 电子邮件发送的状态。 我们的应用程序以我们的网络服务定义的格式构建电子邮件 他们负责为最终用户报告状态。

当然,通过这样做,你仍然需要有一个层来构建 您要发送的电子邮件并将其转发到邮件服务,然后这个 也许仍然需要异步完成。所以只有中继到 SMTP 本身会 像这样与您的应用程序分开。

但是,如果您有一个需要进行群发邮件或类似操作的应用程序 并且您想将其与“正常”工具分开(例如,用于分离进程 和处理负载)然后简单地创建一个单独的服务,它“知道”你的主应用程序的域。

通过这样做,您只需通过将相应信息从主应用程序发送到邮件服务来触发邮件服务。 但同样,也许你需要建立一个后台线程来收集和发送 该服务所需的信息。

您可以通过多种方式创建此服务,例如,使用 WCF 作为带有消息队列的后台 windows 服务,或带有 rest API 的基于 HTTP 的服务等。

你没有提供太多关于你需要做什么的信息,但也许这会 为您指明正确的方向。

【讨论】:

    猜你喜欢
    • 2013-11-15
    • 1970-01-01
    • 2020-01-29
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    相关资源
    最近更新 更多