异步通讯代码的简化# Programming - 葵花宝典
s*d
1 楼
有的异步socket的实现框架是通过诸如beginXXX,endXXX等一些回调函数,
可想而知,这样的代码恐怕支离破碎,即难编又难看。
去年看到C#的新语句,yield,通过状态机和将local变量包装到自动生成的类里,
可以方便实现代码的两次调用间的接续执行。
感觉也可以通过这种机制将原来异步的代码转化成同步的写法。
比如
function webservice(socket s) {
YIELD_BLOCK_BEGIN
...
YIELD_READ(s)
...
YIELD_WRITE(s)
...
YIELD_BLOCK_END
}
另外有线程来调用上面的webservice,到YIELD_READ时,其实是执行异步read就返回,
等read ready的时候线程继续调用webservice,执行就从YIELD_READ后开始。
具体到C++实现,大家有什么好主意吗?
可想而知,这样的代码恐怕支离破碎,即难编又难看。
去年看到C#的新语句,yield,通过状态机和将local变量包装到自动生成的类里,
可以方便实现代码的两次调用间的接续执行。
感觉也可以通过这种机制将原来异步的代码转化成同步的写法。
比如
function webservice(socket s) {
YIELD_BLOCK_BEGIN
...
YIELD_READ(s)
...
YIELD_WRITE(s)
...
YIELD_BLOCK_END
}
另外有线程来调用上面的webservice,到YIELD_READ时,其实是执行异步read就返回,
等read ready的时候线程继续调用webservice,执行就从YIELD_READ后开始。
具体到C++实现,大家有什么好主意吗?