如何在自定义长时间运行的计时器作业中设置进度

问题描述

我需要一些合理的建议来设置自定义长时间运行的计时器作业(超过半小时)的进度。

我在计时器作业Execute中有超过5万个项目的循环。

如何使用SPJobDeFinition.UpdateProgress(int percentage)方法每两分钟更新一次进度条?

我不希望for循环中的每个迭代都更新进度(进度更新太多)。

示例代码

 SPListItemCollection collListItems = list.GetItems();
    for (var i = 0; i < collListItems.Count; i++)
    { 
     //code
    }

解决方法

然后进行10或20次更新。我的意思是这样的:

var percentBlock = 10;
var updateBlock = collListItems.Count / percentBlock;
SPListItemCollection collListItems = list.GetItems();
for (var i = 0; i < collListItems.Count; i++)
{ 
    if(i % updateBlock == 0)
        SPJobDefinition.UpdateProgress(i / updateBlock * percentBlock);
    //code
}

我认为这比期刊更公平。