适合C# Actor的消息执行方式(3):中看不中用的解决方案
2010-09-30 20:50:26 来源:WEB开发网public interface IPongMessageHandler
{
void Pong(Pong pong);
}
public interface IPingMessageHandler
{
void Ping(Ping ping);
void Finish();
}
使用了接口,自然就要提供方法的实现了。我们先从典型而简单的Pong对象看起:
public class Pong : Actor<Action<IPingMessageHandler>>, IPingMessageHandler
{
...
#region IPingMessageHandler Members
void IPingMessageHandler.Ping(Ping ping)
{
Console.WriteLine("Pong received ping");
ping.Post(h => h.Pong(this));
}
void IPingMessageHandler.Finish()
{
Console.WriteLine("Finished");
this.Exit();
}
#endregion
}
原本需要在得到消息之后,根据消息的内容作出不同的响应。而现在,消息会被自动转发为接口中的方法调用,我们只需要实现特定的方法即可。在Ping方法中,我们会得到一个Ping类型的对象——于是我们再向它回复一个消息。消息的类型是Action<IPongMessageHandler>,可以看出,使用Lambda表达式构造这样一个消息特别方便。
Ping类也只需要实现IPongMessageHandler即可,只是这段逻辑“略显复杂”:
public class Ping : Actor<Action<IPongMessageHandler>>, IPongMessageHandler
{
...
public void Start(Pong pong)
{
pong.Post(h => h.Ping(this));
}
#region IPongMessageHandler Members
void IPongMessageHandler.Pong(Pong pong)
{
Console.WriteLine("Ping received pong");
if (--this.m_count > 0)
{
pong.Post(h => h.Ping(this));
}
else
{
pong.Post(h => h.Finish());
this.Exit();
}
}
#endregion
}
- ››适合做商品团购营销的网站
- ››适合所有浏览器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
更多精彩
赞助商链接