有的时候需要在service(记做s1)的method内访问其他service(记做s2)的method,如果s2的method需要较长的时间才能返回,那么通过普通的同步调用,会阻塞住s1,导致s1在此期间无法处理其他请求。那么可否在s1内用普通的异步的方式调用s2的method呢?由于普通的method是通过return返回调用结果的,当通过异步方式调用时,在s1的method的return时,是还没拿到返回值的(因为返回值是在异步调用的回调中获取的),所以也无法return。
这种情况可以使用协程的方式完成。
//sleep_service.cpp
#include <sdbusplus/asio/connection.hpp>
#include <sdbusplus/asio/object_server.hpp>
#include <sdbusplus/bus.hpp>
#include <iostream>
#include <string>
#include <chrono>
#include <thread>
using namespace std;
string doSleep()
{
cout<<"doSleep begin"<<endl;