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

适合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/"}

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); 
}

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

Tags:适合 Actor 消息

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