public string DoOneJob(IPipeline Pipeline)
        {
            int      SuccCount = 0, ErrCount = 0;
            DateTime nextWorkTime = Utilities.Epoch;

            while (!StopFlag)
            {
                if (DateTime.Now > nextWorkTime)
                {
                    Item item = GetNextJob();
                    if (item != null)
                    {
                        try
                        {
                            #region 获取最新转发列表
                            List <NetDimension.Weibo.Entities.status.Entity> result = new List <NetDimension.Weibo.Entities.status.Entity>();
                            try
                            {
                                WeiboAPI.GetRepostOfStatus(item, result);
                            }
                            catch (WeiboException ex)
                            {
                                ErrCount++;
                                nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                                SendMsg(ex.ToString());
                            }
                            for (int i = 0; i < result.Count; ++i)
                            {
                                var newItem = ItemDBManager.ConvertToItem(result[i], Enums.AuthorSource.TopicTrack, CrawlID);
                                ItemDBManager.InsertOrUpdateItem(newItem);
                            }
                            #endregion

                            #region 更新转发评论数的历史记录
                            try
                            {
                                var countData = WeiboAPI.GetRepostAndReplyCount(item.ClientItemID);
                                item.CurrentCount.FetchTime    = DateTime.Now;
                                item.CurrentCount.ForwardCount = countData.Item1;
                                item.CurrentCount.ReplyCount   = countData.Item2;
                            }
                            catch (WeiboException ex)
                            {
                                ErrCount++;
                                nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                                SendMsg(ex.ToString());
                            }

                            List <ItemCountData> count = null;
                            if (item.CountHistory == null)
                            {
                                count = new List <ItemCountData>();
                            }
                            else
                            {
                                count = new List <ItemCountData>(item.CountHistory);
                            }
                            count.Add(item.CurrentCount);
                            item.CountHistory = count.ToArray();
                            #endregion

                            item.Tracking_Forward.FollowCount++;
                            if (WeiboUtilities.ShouldKeepFollow(item))
                            {
                                item.Tracking_Forward.FollowStatus = Enums.CrawlStatus.Normal;
                            }
                            else
                            {
                                item.Tracking_Forward.FollowStatus = Enums.CrawlStatus.Stop;
                            }

                            SuccCount++;
                            continue;
                        }
                        catch (Exception ex)
                        {
                            item.Tracking_Forward.FollowStatus = Enums.CrawlStatus.Normal;
                            ErrCount++;
                            nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                            SendMsg(ex.ToString());
                        }
                        finally
                        {
                            item.Tracking_Forward.FollowNextTime = DateTime.Now.AddMinutes(DefaultSettings.RepostTrackingInterval.TotalMinutes);
                            ItemDBManager.PushbackRepostTrackingJob(item);
                        }
                    }
                }
                Thread.Sleep(IntervalMS);
            }
            StopFlag = false;
            return(SuccCount == 0 && ErrCount == 0 ? "Nothing to do" : string.Format("OneJob Done. Succ {0} Err {1}", SuccCount, ErrCount));
        }