我拿异常做协程的通信方式,主要用于杀协程。
比如有个协程这么写:
try {
Timeout timeout(5.0);
// 下面一般接很多操作。而不简单一行。
return http->get(url, query);
} catch (TimeoutException &) {
qDebug() << "超时了!";
return QByteArray();
}
在以上代码,当协程执行到 http->get() 这个地方会阻塞住。因为事先注册了一个超时,所以 5 秒过后还没有返回结果,事件循环就会重新唤醒这个协程,但是抛出一个超时异常。
这个办法也被用于杀协程。比如用户点了取消按钮,我就会向所有正在运行的协程任务发送一个 CoroutineExitException 协程就会退出了。
【 在 wjhtingerx 的大作中提到: 】
: 这玩意儿把出问题的调用栈都弄没了,反倒不利于调试吧?
--
FROM 183.253.146.*