适合C# Actor的消息执行方式(6):协变与逆变
2010-09-30 20:50:09 来源:WEB开发网string[] urls =
{
"http://www.cnblogs.com/dudu/",
"http://www.cnblogs.com/TerryLee/",
"http://www.cnblogs.com/JeffreyZhao/"
};
Random random = new Random(DateTime.Now.Millisecond);
Monitor monitor = new Monitor(10);
foreach (var url in urls)
{
var urlToCrawl = url;
monitor.Post(m => m.Crawl(urlToCrawl));
Thread.Sleep(random.Next(1000, 3000));
}
上面的代码会每隔1到3秒发出一个抓取请求。由于我们使用了消息传递的方式进行通信,因此对于Monitor来说,这一切都是线程安全的。我们可以随时随地为Monitor添加抓取任务。
接受多种消息(协议)
我们再观察一下Monitor的签名:
class Monitor : Actor<Action<Monitor>>, IPort<Monitor>, ICrawlResponseHandler
可以发现,如今的Monitor已经和它实现的协议没有一对一的关系了。也就是说,它可以添加任意功能,可以接受任意类型的消息,我们只要让它实现另一个接口即可。于是乎,我们再要一个“查询”功能2:
public interface IStatisticRequestHandelr
{
void GetCrawledCount(IPort<IStatisticResponseHandler> requester);
void GetContent(IPort<IStatisticResponseHandler> requester, string url);
}
public interface IStatisticResponseHandler
{
void ReplyCrawledCount(int count);
void ReplyContent(string url, string content);
}
- ››适合做商品团购营销的网站
- ››适合所有浏览器hack的CSS技巧
- ››消息称中国移动即将获得iPhone 4销售权
- ››适合C# Actor的消息执行方式(1):Erlang中的模式...
- ››适合C# Actor的消息执行方式(2):C# Actor的尴尬...
- ››适合C# Actor的消息执行方式(3):中看不中用的解...
- ››适合C# Actor的消息执行方式(4):阶段性总结
- ››适合C# Actor的消息执行方式(5):一个简单的网络...
- ››适合C# Actor的消息执行方式(6):协变与逆变
- ››适合1-5个月经验的seo优化全过程分享
- ››消息称联通高层赴美谈引入iPhone4 将带WiFi
- ››消息称微软将在近期发布IE9 beta