# 通过协程的方法屏蔽异步同步的区别 ## 同步 SD框架中Task就是一个典型的同步案例。task中不允许调用异步的api。 ## 异步 SD框架中除了task基本都是异步的,异步最好使用异步api达到更高的效率。 ## 如何选择 在1.6版本之前,task中如果使用mysql和redis都必须调用同步的客户端,而且同步客户端和异步客户端的调用方法以及返回结构都不一样,这样model和task的代码完全无法重用,也更不可能通过task去调用model。 ## 无需选择 1.6版本后实现了框架进行异步和同步的选择,1.7版本对于这种新的方式进行了优化和完善。 通过协程的方式写的代码可以同时在modle和task中运行。也不用关心同步和异步的写法不同,他们的调用方式和返回值都保持绝对的一致。 ```php $value = yield $this->redis_pool->getCoroutine()->setex('test', 10, 'testRedis'); ``` 比如这段代码在model和task中均能被正确的执行。 同时在task中也可以调用model的方法。 ```php $testModel = $this->loader->model('TestModel', $this); $result = yield $testModel->test_task(); ``` 至此难为程序员的异步和同步的区别现在被完美的解决了。