SharePoint TimerJobs 和线程

标签 sharepoint sharepoint-2010

我编写了一个 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 是否确实如此如果这些按分钟间隔执行的调用重叠,则创建多个线程。

最佳答案

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

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

For example take the deployment ask which is nothing more than a job. The deployment task only allows One job to run for a given solution at a time. It makes sure that all of the tasks finish on each server in the farm before the overall job is reported as done.

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

关于SharePoint TimerJobs 和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2314386/

相关文章:

SharePoint - 发生意外错误

c# - Web 部件调用 Web 处理程序

sharepoint - Microsoft Graph API - 如何将附件上传到列表项

c# - Sharepoint 连接到另一个 SQL 服务器?

database - Mount-SPContentDatabase 没有 Root-Web

sharepoint - 如何将 SharePoint 2010 列表表单从 InfoPath 重置为默认表单?

sharepoint - 以编程方式设置 SharePoint 网站的默认组

用于连接 Sharepoint Server 的 Java API

c# - 共享点 2010 : How to extract personalized web part property for all users

ajax - OData v2 按 $expanded 实体的属性过滤