WEB开发网
开发学院软件开发C语言 适合C# Actor的消息执行方式(4):阶段性总结 阅读

适合C# Actor的消息执行方式(4):阶段性总结

 2010-09-30 20:50:18 来源:WEB开发网   
核心提示: classPerson:Actor<Message>{protectedoverridevoidReceive(Messagemessage){if(message.Tag=="Chat"){Personanother=(Person)message.Argume

class Person : Actor<Message> 
{ 
  protected override void Receive(Message message) 
  { 
    if (message.Tag == "Chat") 
    { 
      Person another = (Person)message.Arguments[0]; 
      Topic topic = (Topic)message.Arguments[1]; 
      // ... 
    } 
    else if (message.Tag == "Eat") 
    { 
      Restaurant restaurant = (Restaurant)message.Arguments[0]; 
      // ... 
    } 
    else if (message.Tag == "Work") 
    { 
      Person reportTo = (Person)message.Arguments[0]; 
      Job job = (Job)message.Arguments[1]; 
      // ... 
    } 
  } 
}

图示如下:

适合C# Actor的消息执行方式(4):阶段性总结

这个方式和Erlang可谓如出一辙,但是由于缺少了Erlang的模式匹配和自动绑定,于是C#代码需要大量的if…else判断,以及繁琐而危险的转型操作。此外,和Erlang中动态类型的缺点完全相同,无论是消息的发送还是接受完全不是静态类型的,因此无论是静态检查,编辑还是重构都比较困难。试想,如果一个公用的服务所接受的消息结构改变了,那么所有用到它的地方都必须修改正确——如果缺少静态检查,错误都只能在运行时才能发现。Erlang有着强大的动态升级能力,尚可接受不断地在线更新。而在.NET平台中,如果使用这种Tag Message的方式,待到运行时发现错误,要修改起来就比较麻烦了。

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

Tags:适合 Actor 消息

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