任务投递

任务可投递协程和异步,如果是异步需要定义监听器,处理任务执行结果数据。

实例

  1. use Swoft\Task\Task;
  2. $result = Task::deliver('demo', 'coroutineJob', ['p1', 'p2'], Task::TYPE_CO);
  3. $result = Task::deliver('demo', 'asyncJob', ['p1', 'p2'], Task::TYPE_ASYNC);
  • 参数一,定义投递任务组名称,与 @Task 注解定义的名称(name)关系对应。
  • 参数二,定义投递任务的名称,与类里面方法名称对应
  • 参数三,任务方法的参数,数组方式传递
  • 参数四,定义投递任务类型,仅 Task::TYPE_COTask::TYPE_ASYNC 两个可选项

异步任务监听器

事件监听器必须监听,TaskEvent::FINISH_TASK事件。

  1. use Swoft\Bean\Annotation\Listener;
  2. use Swoft\Event\EventHandlerInterface;
  3. use Swoft\Event\EventInterface;
  4. use Swoft\Task\Event\TaskEvent;
  5. /**
  6. * @Listener(TaskEvent::FINISH_TASK)
  7. */
  8. class TaskFinish implements EventHandlerInterface
  9. {
  10. public function handle(EventInterface $event)
  11. {
  12. var_dump("task finish! ", $event->getParams());
  13. }
  14. }