适合C# Actor的消息执行方式(2):C# Actor的尴尬
2010-09-30 20:50:29 来源:WEB开发网我们可以使用这种方式来实现一个乒乓测试。既然是Tag Message,那么定义一些Tag便是首要任务。Tag表示“做什么”,即消息的“功能”。在乒乓测试中,有两种消息,共三个“含义”。Erlang使用原子作为tag,在.NET中我们自然可以使用枚举:
public enum PingMsg
{
Finished,
Ping
}
public enum PongMsg
{
Pong
}
在这里,我们使用简单的ActorLite进行演示(请参考ActorLite的使用方式)。因此,Ping和Pong均继承于Actor<Message>类,并实现其Receive方法。
对于Ping对象来说,它会维护一个计数器。每当收到PongMsg.Pong消息后,会将计数器减1。如果计数器为0,则回复一条PingMsg.Finished消息,否则就回复一个PingMsg.Ping:
public class Ping : Actor<Message>
{
private int m_count;
public Ping(int count)
{
this.m_count = count;
}
public void Start(Actor<Message> pong)
{
pong.Post(new Message(PingMsg.Ping, this));
}
protected override void Receive(Message message)
{
if (message.Tag.Equals(PongMsg.Pong))
{
Console.WriteLine("Ping received pong");
var pong = message.Arguments[0] as Actor<Message>;
if (--this.m_count > 0)
{
pong.Post(new Message(PingMsg.Ping, this));
}
else
{
pong.Post(new Message(PingMsg.Finished));
this.Exit();
}
}
}
}
- ››适合做商品团购营销的网站
- ››适合所有浏览器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
更多精彩
赞助商链接