Laravel/Octane如何为concurrently方法设置执行超时?
Octane::concurrently 超时设置方案
原生 Octane::concurrently 没有提供直接的全局超时配置参数,你可以根据需求选择以下两种方案实现超时控制:
方案1:给单个查询加细粒度超时控制
Eloquent 查询本身支持 timeout() 方法,单位为秒,你可以直接给每个闭包内的查询单独设置超时,适合需要精准控制每个操作最大耗时的场景:
Octane::concurrently([ fn () => User::timeout(3)->get(), // 单查询最大执行3秒 fn () => Server::timeout(5)->get(), // 单查询最大执行5秒 fn () => Model::timeout(4)->get(), //... ]);
该方案兼容Swoole、RoadRunner两种Octane驱动,单个查询超时不会影响其他并发任务的执行,你可以自行捕获查询超时异常做后续处理。
方案2:给整批并发任务加全局总超时
如果你使用的是Swoole驱动的Octane,可以直接调用底层Swoole的协程批量执行方法,它原生支持第三个参数作为整批任务的总超时时间(单位:秒):
$tasks = [ fn () => User::all(), fn () => Server::all(), fn () => Model::all(), //... ]; // 整批任务总超时设置为5秒,超时后未完成的任务会被强制终止 $results = Swoole\Coroutine\batch($tasks, count($tasks), 5);
该方案只适用于Swoole驱动的Octane,总超时触发后所有未完成的任务都会被中止,适合需要严格控制整批操作总耗时的场景。
内容的提问来源于stack exchange,提问作者Mwthreex
相关产品推荐
相关产品推荐

