文件名称:C#基于异步事件回调多线程容器
文件大小:1.56MB
文件格式:ZIP
更新时间:2016-08-14 10:11:11
多线程 Thread Func Delegate 异步事件
上传项目不支持Firefox,提示代码附件太大(1.4M),我写了30多分钟的描述全没了,太坑爹了。
10分有点贵,绝对原创,共2个代码文件300多行,下载请谨慎。你下载了,若绝对不爽在评论中说出来,不要让其他同学上当,如果觉得还可以也请留言。
代码采用多工作者多线程执行任务。通过暴露的方法往工作者传递消息,然后采用事件回调返回处理结果,实现的事件有OnThreadComplete,OnAddedTask,OnStart,OnSuccess,OnFailure,OnTimeout。
事件回调支持同步或异步,每工作者可以指定执行超时时间,避免线程阻塞死掉。队列采用线程安全的BlockingCollection,每组工作者用一个队列。委托采用Func来定义的,没有采用传统且不太好理解的Delegate。这让代码减少很多,也更容易理解。多线程应该采用消息中心来交换数据,这样就规避了线程同步交互,等待,阻塞等等,全部是异步调用,全部是接收消息工作,然后产生消息,线程间没有耦合,消息中心有很多成熟的方案如RabbitMQ, Redis(里面有简单的消息交换),微软有消息云服务等。如果应用不复杂,可以采用DB做个简单的消息中心,建议采用HTTP接口来获取与写入消息,方便将来升级重构消息中心。
开发环境VS2012,Framework4.0,代码注释量很大,如果你高兴这代码你可以随意蹂躏,如果你有建设性意见请告诉我。
下面是部分测试代码:
//发送消息方法容器
var msgContainer = new Hashtable();
//创建并启动工作者
foreach (var key in workers.Keys)
{
//创建工作者
//启动5个线程,异步事件回调,方法执行20秒超时,程序跑起来有100个线程,由于引入超时控制,实际线程将达100+50
//下面的20个工作组,有5个是超时的,主要测试OnTimeout事件,你可以设置seleep的时间来控制
//我把sleep的时间设置的有点长,方便你测试
//测试的时候你会看见有异常,那是应为Timeout我采用的是Thread.Abort方法,这样才出发了ontimeout事件
var worker = new Sehui.Worker(5, key.ToString(), (Func
【文件预览】:
SehuiWorker
----SehuiWorker.v11.suo(32KB)
----SehuiWorker.sln(923B)
----packages()
--------repositories.config(130B)
--------Newtonsoft.Json.5.0.6()
----SehuiWorker()
--------SehuiWorker.csproj(3KB)
--------Worker.cs(12KB)
--------packages.config(142B)
--------Program.cs(8KB)
--------Properties()
--------App.config(167B)
--------obj()
--------bin()