3

我编写了一个 SharePoint 2010 应用程序,它使用 TimerJob 来触发对列表中某些文档的处理。计时器设置为每分钟触发一次,但处理可能需要一分钟以上。我只是想知道计时器作业的下一个触发器是否将使用新线程启动,或者计时器服务是否会等到第一个线程完成。我不知道 Sharepoint 如何管理 TimerJobs 的线程,也找不到任何相关信息。

鉴于我的TimerJob定义具有以下内容,这可能是一个问题:

 public override void Execute(Guid contentDbId)
    {
        try
        {
            SPWebApplication webApplication = this.Parent as SPWebApplication;
            SPContentDatabase contentDb = webApplication.ContentDatabases[contentDbId];
            using (SPSite site = contentDb.Sites[0])
            {
                using (SPWeb web = site.RootWeb)
                {                       
                    PRManager.TriggerProcessing(web);    // ?                   
                }
            }
        }                      
        catch (Exception)
        { 
        }
    }
}

显然,这PRManager.TriggerProcessing()是一种静态方法,虽然它确实包含一次限制一个线程进入方法主体的机制,但我只是想知道如果 SharePoint 确实在这些 at-minute-interval 调用的情况下创建了多个线程执行重叠。

4

1 回答 1

3

好吧,与其说是“线程”,不如说是“工作”。

SharePoint 将所有作业存储在一个数据库表中,并使用该表来跟踪正在运行的内容和运行位置。它有一个内置的同步引擎,负责确保作业按照作业指令的说明执行。

例如,以部署问题为例,这只不过是一份工作。部署任务一次只允许为给定解决方案运行一个作业。它确保在整个作业报告为已完成之前,场中的每台服务器上的所有任务都已完成。

因此,答案将取决于您的作业配置属性是如何设置的。该作业有一个属性告诉 SharePoint 一次只允许该作业的一个实例运行。因此,如果作业当前正在执行它的另一个实例,它将不会被启动。

于 2010-02-24T01:05:25.530 回答