博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
延迟添加队列
阅读量:6363 次
发布时间:2019-06-23

本文共 2579 字,大约阅读时间需要 8 分钟。

using System;using System.Collections.Generic;using System.Diagnostics.Contracts;using System.Linq;using System.Net;using System.Text;using System.Threading.Tasks;namespace AnfleCrawler.Common{    ///     /// 延迟添加队列    ///     internal class LagPattern : Disposable    {        private static readonly List
Set = new List
(); private const double PerCount = 50d; private WeakReference _weakRef; private int _depth; private object _state; private JobTimer _job; private PageCrawler Weak { get { if (!_weakRef.IsAlive) { throw new InvalidOperationException("Wrap Dead"); } return (PageCrawler)_weakRef.Target; } } public LagPattern(PageCrawler wrap, StringPatternGenerator urlGen, int depth, object state) { Contract.Requires(wrap != null && urlGen != null); _weakRef = new WeakReference(wrap); _depth = depth; _state = state; var tor = urlGen.GetEnumerator(); int totalCount = urlGen.Count(); if (totalCount < PerCount) { Proc(tor); return; } double span = Math.Ceiling(360d / (totalCount / PerCount)); //double span = 16d; App.LogInfo("LagPattern Span:{0}", span); _job = new JobTimer(Proc, TimeSpan.FromSeconds(span)); _job.Start(tor); //App.DisposeService.Register(this.GetType(), this); lock (Set) { Set.Add(this); } } protected override void DisposeInternal(bool disposing) { if (disposing) { if (_job != null) { _job.Dispose(); } //App.DisposeService.Release(this.GetType(), this); lock (Set) { Set.Remove(this); } } } private void Proc(object state) { var wrap = this.Weak; var urlGen = (IEnumerator
)state; for (int i = 0; i < PerCount; i++) { if (!urlGen.MoveNext()) { this.Dispose(); return; } wrap.PushUrl(new Uri(urlGen.Current), _depth, _state); } } }}

 

转载于:https://www.cnblogs.com/Googler/p/4287383.html

你可能感兴趣的文章
国内云计算厂商众生相:四大阵营十几家企业生存盘点
查看>>
细说Unicode(一) Unicode初认识
查看>>
Node.js有了新的管理者
查看>>
虚拟研讨会:.NET的未来在哪里?
查看>>
Java 20年:历史与未来
查看>>
彻底理解Javascript中的原型链与继承
查看>>
2017 Vue.js 2快速入门指南
查看>>
REST是新SOAP?
查看>>
腾讯最大规模裁撤中层干部,让贤年轻人
查看>>
美国国会为苹果和FBI举行了听证会
查看>>
gRPC-Web发布,REST又要被干掉了?
查看>>
如何:强化 TCP/IP 堆栈安全
查看>>
Spring3 MVC中使用Swagger生成API文档
查看>>
FastCGI PHP on Windows Server 2003
查看>>
LimeSDR Getting Started Quickly | LimeSDR上手指南
查看>>
JSP标签JSTL的使用(1)--表达式操作
查看>>
SAP顾问的人脉比技术更为重要
查看>>
FI/CO PA考试试卷
查看>>
汽车介质应用非常严苛?没关系,新技术带来的高精度传感器十分适应!
查看>>
天合光能 - 用计算捕捉“光的能量”
查看>>