C#基于异步事件回调多线程容器

上传者: oicefire | 上传时间: 2024-01-25 05:05:28 | 文件大小: 1.56MB | 文件类型: ZIP
上传项目不支持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)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.Start(); //将增加消息方法放到Hashtable中 //这里我是偷懒,下面可以用循环的方式往线程中add message msgContainer.Add(key.ToString(), new Func(worker.AddTask)); } //向20个工作者发送消息,每个工作者发送20条消息 for (var i = 0; i < 20; i++) { for (var k = 0; k < 20; k++) { ((Func)msgContainer["SyncDb" + k])("[Work " + k + "] Message " + i); Console.WriteLine("send msg to worker{0},msgid:{1}", k, i); } }

文件下载

资源详情

[{"title":"( 20 个子文件 1.56MB ) C#基于异步事件回调多线程容器","children":[{"title":"SehuiWorker","children":[{"title":"SehuiWorker.v11.suo <span style='color:#111;'> 31.50KB </span>","children":null,"spread":false},{"title":"SehuiWorker.sln <span style='color:#111;'> 923B </span>","children":null,"spread":false},{"title":"packages","children":[{"title":"repositories.config <span style='color:#111;'> 130B </span>","children":null,"spread":false},{"title":"Newtonsoft.Json.5.0.6","children":[{"title":"Newtonsoft.Json.5.0.6.nupkg <span style='color:#111;'> 1.33MB </span>","children":null,"spread":false},{"title":"lib","children":[{"title":"net40","children":[{"title":"Newtonsoft.Json.xml <span style='color:#111;'> 453.63KB </span>","children":null,"spread":false},{"title":"Newtonsoft.Json.dll <span style='color:#111;'> 419.00KB </span>","children":null,"spread":false}],"spread":true}],"spread":true}],"spread":true}],"spread":true},{"title":"SehuiWorker","children":[{"title":"SehuiWorker.csproj <span style='color:#111;'> 2.75KB </span>","children":null,"spread":false},{"title":"Worker.cs <span style='color:#111;'> 11.73KB </span>","children":null,"spread":false},{"title":"packages.config <span style='color:#111;'> 142B </span>","children":null,"spread":false},{"title":"Program.cs <span style='color:#111;'> 8.15KB </span>","children":null,"spread":false},{"title":"Properties","children":[{"title":"AssemblyInfo.cs <span style='color:#111;'> 1.33KB </span>","children":null,"spread":false}],"spread":true},{"title":"App.config <span style='color:#111;'> 167B </span>","children":null,"spread":false},{"title":"obj","children":[{"title":"Debug","children":[{"title":"TempPE","children":null,"spread":false},{"title":"DesignTimeResolveAssemblyReferencesInput.cache <span style='color:#111;'> 6.54KB </span>","children":null,"spread":false},{"title":"TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs <span style='color:#111;'> 0B </span>","children":null,"spread":false},{"title":"TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs <span style='color:#111;'> 0B </span>","children":null,"spread":false},{"title":"TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs <span style='color:#111;'> 0B </span>","children":null,"spread":false}],"spread":true}],"spread":true},{"title":"bin","children":[{"title":"Debug","children":[{"title":"Sehui.Worker.vshost.exe.config <span style='color:#111;'> 167B </span>","children":null,"spread":false},{"title":"SehuiWorker.vshost.exe.manifest <span style='color:#111;'> 490B </span>","children":null,"spread":false},{"title":"SehuiWorker.vshost.exe.config <span style='color:#111;'> 167B </span>","children":null,"spread":false},{"title":"SehuiWorker.vshost.exe <span style='color:#111;'> 21.95KB </span>","children":null,"spread":false}],"spread":true},{"title":"Release","children":null,"spread":false}],"spread":true}],"spread":true}],"spread":true}],"spread":true}]

评论信息

免责申明

【只为小站】的资源来自网友分享,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,【只为小站】 无法对用户传输的作品、信息、内容的权属或合法性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论 【只为小站】 经营者是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。
本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二条之规定,若资源存在侵权或相关问题请联系本站客服人员,zhiweidada#qq.com,请把#换成@,本站将给予最大的支持与配合,做到及时反馈和处理。关于更多版权及免责申明参见 版权及免责申明