适合C# Actor的消息执行方式(6):协变与逆变
2010-09-30 20:50:09 来源:WEB开发网我们准备了一个private的Crawled方法,如果抓取成功了,我们会把这个方法的调用封装在一条消息中重新发给自身(红色代码)。请注意,这是个私有方法,因此这里完全是在做“内部”消息控制。
开启抓取任务
在上一篇文章中,我们为Monitor添加了一个Start方法,它的作用是启动URL。我们知道,对单个Actor来说消息的处理是线程安全的,但是这个前提是使用“消息”传递的方式进行通信,如果直接调用Start公有方法,便会破坏这种线程安全特性。不过现在的Monitor已经不受接口的限制,可以自由接受任何它可以执行的消息,因此我们只要对外暴露一个Crawl方法即可:
public class Monitor : Actor<Action<Monitor>>, IPort<Monitor>,
ICrawlResponseHandler,
IStatisticRequestHandelr
{
...
public void Crawl(string url)
{
if (this.m_allUrls.Contains(url)) return;
this.m_allUrls.Add(url);
if (this.WorkingCrawlerCount < this.MaxCrawlerCount)
{
this.WorkingCrawlerCount++;
IPort<ICrawlRequestHandler> crawler = new Crawler();
crawler.Post(c => c.Crawl(this, url));
}
else
{
this.m_readyToCrawl.Enqueue(url);
}
}
}
于是我们便可以向Monitor发送消息,让其抓取特定的URL:
- ››适合做商品团购营销的网站
- ››适合所有浏览器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
更多精彩
赞助商链接