首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SharePoint中DataSheet入口的定时器作业调度

SharePoint中DataSheet入口的定时器作业调度
EN

Stack Overflow用户
提问于 2010-07-13 23:50:08
回答 3查看 326关注 0票数 1

我有一个列表,其中有一个ItemUpdated处理程序。

当我使用数据表视图进行编辑并修改每一项时,ItemUpdated事件显然将对每一项运行。

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

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

代码语言:javascript
复制
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();

当我在服务器上尝试时,我得到了很多错误

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-15 19:00:01

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

票数 1
EN

Stack Overflow用户

发布于 2010-07-14 07:08:50

这是因为事件是异步的。你需要重新思考你到底想用这段代码来解决什么问题,并有可能对其进行重构。

票数 0
EN

Stack Overflow用户

发布于 2010-07-14 14:23:04

也许你应该试着在计时器作业对象上使用"lock“?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3238900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档