mysql - Orchard 中的后台运行功能

标签 mysql nhibernate orchardcms

所以我想做的是一个 Orchard 功能,如果启用,运行一个单独的线程(服务)来查询IRepository<>PartRecord的strong>。

关于启动服务:

我尝试在 IFeatureEventHandler.Enabled() 上启动该服务,但这仅在启用该功能时执行,而不是在 Orchard 启动时执行。

所以我在 Orchard 框架中查找了我可以使用的任何内容,并找到了 IOrchardShellEvents.Activated()

所以我基本上是这样做的:

 public class MyService : IOrchardShellEvents {

    ...More stuff...

    public void Activated() {
        running = true;
        //Run DoWork() in separate thread
    }

    public void Terminating() {
        running = false;
    }
     
    private void DoWork(){
        //do service work while running = true
    }

}

这确实有效,但我不确定这是否是 Orchard 启动时启动自定义线程的常见做法。因此,如果没有这样做,请纠正我..

关于存储库查询问题:

存储库被注入(inject),首先它查询表很好。一段时间后,它会抛出一个异常:“当前不支持多个同时连接或同一事务内具有不同连接字符串的连接。”

这看起来非常奇怪,一个执行了几次的查询在一段时间后崩溃了; 这是显示我如何使用存储库的代码:

 public MyService(ServiceManager manager, IRepository<SomePartRecord> repo) {
        this.manager = manager;
        //The manager of the service uses the repository to get a single column(ExpectaId, not a PK) out of each row
        manager.LoadIds = () =>
              repo.Table.ToList().Select(record => record.ExpectaId);
    }

注意: Func<> manager.LoadIds 每 10 秒调用一次

注意:我使用的是 MySql Server 5.5

最佳答案

好的,所以任何以“我如何旋转一个单独的线程以便......”开头的问题的答案都是“不”。严重地。例如,参见http://ayende.com/blog/158945/thou-shall-not-do-threading-unless-you-know-what-you-are-doing

幸运的是,Orchard 提供了一种在后台运行任务的方法,而无需旋转您自己的线程:How to run scheduled tasks in Orchard?

关于mysql - Orchard 中的后台运行功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13778217/

相关文章:

asp.net - 我应该使用 Orchard 或 umbraco 还是其他东西?

c# - 从 MySQL 服务器删除多条记录的最有效方法是什么?

c# - 使用 NHibernate 将多列映射到数组

mysql - 在 Ubuntu 上同时使用 MySQL 5.7 和 MySQL 8.0

c# - 如何在NHibernate中查询每个组中的第一个条目

nhibernate - 将对象从基类转换为子类是否有效?

orchardcms - Orchard CMS 使用投影仪显示来自 MediaPicker 的图像

css - Orchard 1.10.2 - 工作流事件的样式问题

php - PHP 计算重复值

MySQL - 一对多联接 - 仅返回 "One"表中 1 行的结果