php多线程抓取多个网页(C#基于异步事件回调多线程容器上传项目不支持Firefox,提示代码附件太大)
优采云 发布时间: 2021-09-28 09:21php多线程抓取多个网页(C#基于异步事件回调多线程容器上传项目不支持Firefox,提示代码附件太大)
C#基于异步事件回调的多线程容器
上传项目不支持火狐,代码附件过大(1.4M)。写了30多分钟的描述不见了。太骗人了 10点有点贵,肯定原创,2个代码文件一共300多行,下载的时候请慎重。你已经下载了。如果您非常不高兴,请在评论中说出来。不要让其他学生愚弄你。如果您觉得还行,请留言。该代码使用多个工作线程和线程来执行任务。通过暴露的方法将消息传递给worker,然后使用事件回调返回处理结果。实现的事件是 OnThreadComplete、OnAddedTask、OnStart、OnSuccess、OnFailure、OnTimeout。事件回调支持同步或异步,并且每个worker可以指定执行超时以避免线程阻塞。队列使用线程安全的 Blocking采集,每组 worker 使用一个队列。委托是由 Func 定义的,而不是传统的不太理解的委托。这大大减少了代码并使其更易于理解。多线程应该使用消息中心来交换数据,避免线程同步交互、等待、阻塞等,都是异步调用,都是接收消息,然后生成消息,线程之间没有耦合,消息中心有很多成熟的解决方案,比如RabbitMQ、Redis(带有简单的消息交换),微软有消息云服务等等。如果应用不复杂,可以用DB作为简单的消息中心。
开发环境为VS2012,Framework4.0,代码注释量非常大。如果你对这段代码感到满意,你可以随意破坏它。如果您有建设性的意见,请告诉我。下面是部分测试代码: //发送消息方法容器 var msgContainer = new Hashtable();//创建并启动worker foreach (var key in workers.Keys){//创建workers//启动5个线程,异步Event回调,方法执行超时 20 秒,程序运行 100 个线程。由于引入了超时控制,实际线程将达到下面20个工作组中的100+50//,其中5个超时。主要测试是针对 OnTimeout 事件。可以设置sellep的时间来控制。//我把sleep的时间设置的有点长,方便大家测试。//测试的时候,你会看到异常。那应该是超时。我使用了 Thread.Abort 方法。ontimeout 事件开始 var worker = new Sehui.Worker(5, key.ToString(), (Func)workers[key], false, new TimeSpan(0, 0, 20));worker.OnStart += worker_OnEvent;worker.OnSuccess += worker_OnEvent;worker.OnFailure += worker_OnEvent;worker.OnTimeout += worker_OnEvent;//启动worker worker.Start();//将消息方法添加到Hashtable//这里我偷懒了,下面可以循环方式向线程添加消息msgContainer.Add(key.ToString(), new Func(worker.AddTask));)。//向20个worker发送消息,每个worker发送20条消息为( var i = 0; i <20; i++){for (var k = 0; k <20;
现在就下载