task中能返回的数据通过php的Serialization函数返回到worker进程,因此像Closure等不能被序列化的对象不能返回,包括$exception中可能包括Closure
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
function onTask($serv, $task_id, $from_id, $data){ if(!is_array($data) || !$data['id']){ return new Exception("Invalid task data"); } $id = $data['id']; if(!isset($this->callbacks[$id])){ return new Exception("Invalid task id"); } try{ $callback = $this->callbacks[$id][0]; $rs = call_user_func_array($callback, $data['data']); return $rs; } catch(Exception $e){ return $e; // 可能出错,使work进程不能正常运行 } } |