WEB开发网
开发学院软件开发C语言 适合C# Actor的消息执行方式(6):协变与逆变 阅读

适合C# Actor的消息执行方式(6):协变与逆变

 2010-09-30 20:50:09 来源:WEB开发网   
核心提示: 我们准备了一个private的Crawled方法,如果抓取成功了,适合C# Actor的消息执行方式(6):协变与逆变(4),我们会把这个方法的调用封装在一条消息中重新发给自身(红色代码),请注意,不过现在的Monitor已经不受接口的限制,可以自由接受任何它可以执行的消息,这是个私有方法,因此

我们准备了一个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:

上一页  1 2 3 4 5 6 7  下一页

Tags:适合 Actor 消息

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接