SharePoint中数据表条目的计时器作业调度

SharePoint中数据表条目的计时器作业调度,sharepoint,timer,jobs,Sharepoint,Timer,Jobs,我有一个列表,上面有一个ItemUpdate处理程序 当我使用数据表视图进行编辑并修改每个项目时,ItemUpdated事件显然会针对每个项目运行 在我的ItemUpdated事件中,我希望它检查是否有计划运行的计时器作业。如果有,则扩展此作业的SPOneTimeSchedule计划以将其延迟5秒。如果没有,则创建计时器作业,并从现在起将其计划为5秒 我尝试查看处理程序中是否存在作业定义,如果确实存在,则将计划延长5秒。如果不存在,则创建作业定义以在几分钟内运行 MyTimerJob rollu

我有一个列表,上面有一个ItemUpdate处理程序

当我使用数据表视图进行编辑并修改每个项目时,ItemUpdated事件显然会针对每个项目运行

在我的ItemUpdated事件中,我希望它检查是否有计划运行的计时器作业。如果有,则扩展此作业的SPOneTimeSchedule计划以将其延迟5秒。如果没有,则创建计时器作业,并从现在起将其计划为5秒

我尝试查看处理程序中是否存在作业定义,如果确实存在,则将计划延长5秒。如果不存在,则创建作业定义以在几分钟内运行

MyTimerJob rollupJob = null;
foreach (SPJobDefinition job in web.Site.WebApplication.JobDefinitions) 
{
    if (job.Name == Constants.JOB_ROLLUP_NAME)
    {
        rollupJob = (MyTimerJob)job;
    }
}
if (rollupJob == null)
{
        rollupJob = new MyTimerJob(Constants.JOB_ROLLUP_NAME, web.Site.WebApplication);
}

SPOneTimeSchedule schedule = new SPOneTimeSchedule(DateTime.Now.AddSeconds(5));
rollupJob.Schedule = schedule;
rollupJob.Update();
当我在服务器上尝试时,我会遇到很多错误

发生更新冲突,您必须重新尝试此操作。对象MyTimerJob Name=MyTimerJobName Parent=SPWebApplication Name=SharePoint-80正在由w3wp进程中的NT AUTHORITY\NETWORK SERVICE进行更新


我认为该作业可能是第一次运行,一旦运行,其他ItemUpdated事件将进入并查找现有作业定义。然后,即使当前正在使用该定义,它也会尝试更新该定义。我是否应该创建新的作业定义名称,使其不会位于第一个定义的顶部?或者将时间提高到inute?

这是因为事件是异步的。您需要重新考虑使用此代码试图解决的问题,并可能重新考虑它。

这是因为事件是异步的。您需要重新考虑使用此代码试图解决的问题,并可能重新考虑它。

也许您应该尝试使用“锁定计时器作业对象?

也许您应该尝试使用“锁定”“在计时器作业对象上?

我自己解决了这个问题,只需将延迟设置为从现在起的分钟时间,而不管是否找到定义。这样,当它很忙时,它会一直推迟作业的调度,直到完成处理

我自己解决了这个问题,只需将延迟设置为从现在开始的分钟时间,而不管是否找到定义。这样,当它很忙时,它会一直推迟作业的日程安排,直到它完成处理

是的,我知道更新和添加的事件是异步的-我需要使用这些事件,但是,因为我只对更改感兴趣,一旦更改完成p,我知道更新和添加的事件是异步的,但是我需要使用这些事件,因为我只对更改感兴趣