上传项目不支持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); } }
2024-01-25 05:05:28 1.56MB Thread Func Delegate 异步事件
1
基于ipv6的抓包程序(C#版),是以前的一个作业,里面有说明文档
2024-01-25 05:04:50 37KB IPv6 抓包
1
“抽象类允许(但不要求)抽象类包含抽象成员”。但是一个抽象类里不写抽象方法就没有意义了,既然如此,还不如直接写个普通类? 在一个抽象类里可以不声明抽象方法,这在语法上是没问题的,但实际来说,这样是没有任何意义的。也就是说,你为什么会选择写一个抽象类呢?当然是为了想某个方法能够被OVERRIDE,以实现多态。
2024-01-25 05:04:29 99KB 抽象类 抽象方法
1
WPF使用C#制作动画BusyIndicator,学习动画制作必学
2024-01-25 05:03:54 59KB wpf动画 BusyIndicator wpf源码
1
C# 基于socket 客户端程序 包你用.
2024-01-25 05:03:31 39KB socket
1
动态书写情书,让女孩一见倾心,为你获得完美的爱情!
2024-01-25 05:03:10 209KB
1
中文名: C#入门经典(第4版) 原名: Beginning Microsoft Visual C# 2008 作者: (美)沃森(Watson K.) (美)内格尔(Nagel C.) 译者: 齐立波 出版社: 清华大学出版社 目录: 第1部分 C#语言 第1章 C#简介 第2章 编写C#程序 第3章 变量和表达式 第4章 流程控制 第5章 变量的更多内容 第6章 函数 第7章 调试和错误处理 第8章 面向对象编程简介 第9章 定义类 第10章 定义类成员 第11章 集合、比较和转换 第12章 泛型 第13章 其他OOP技术 第14章 C#3.0语言的改进 第2部分 Windows编程 第15章 Windows编程基础 第16章 Windows Forms的高级功能 第17章 使用通用对话框 第18章 部署Windows应用程序 第3部分 Web编程 第19章 Web编程基础 第20章 Web高级编程 第21章 Web服务 第22章 Ajax编程 第23章 部署Web应用程序 第4部分 数据访问 第24章 文件系统数据 第25章 XML 第26章 LINQ简介 第27章 LINQ to SQL 第28章 ADO.NET和LINQ over 第29章 LINQ to XML 第5部分 其他技术 第30章 属性 第31章 XML文档说明 第32章 网络 第33章 GDI+简介 第34章 Windows Presentation Foundation 第35章 Windows Communication Foundation 第36章 Windows Workflow Foundation
2024-01-25 05:02:24 19.07MB C#入门经典
1
您只需要做以下几个步骤就可以将FacePlusPlus SDK集成到您的C#工程中 新建一个C#的项目(asp/form/wpf/...) 设置项目的目标框架为.NET Framework 4(对于.NET 4 Client Profile可能无法使用) 把根目录中的log4net.dll和FaceppSDK.dll添加到引用中 添加faceppSDK命名空间 使用你的appkey和appsecret初始化一个FaceServic 开始尽情的使用各种功能吧! -- 更多的使用方法样例可以在“FaceppDemo”工程中发现 --
2024-01-25 05:01:45 567KB sdk
1
CLR via C# 4th 中文 PDF
2024-01-24 18:01:02 252.95MB
1
本文实例讲述了C#编程实现连接SQL SERVER数据库。分享给大家供大家参考,具体如下: 首先,在SQL SEVER里建立一个名为“Exercise”的数据库名,在该数据库下建立一张名为“lianxi”的表。好,现在开始写代码。 在FORM1里拖一个DATAGIRDVIEW用于显示表,在放一个BUTTON用于执行操作。加入命名空间 代码如下:using system.data.sqlclient; private void button1_Click(object sender, EventArgs e) { string con, sql; con = "Server=.;D
2024-01-24 16:26:35 45KB SQL sqlserver数据库
1