CoroutineRunner

协程执行器 CoroutineRunner类似于Csp组件,但更加灵活,可以投递协程任务并限制最大同时执行数、最长执行时间、成功或失败回调

简单示例

use co;
use EasySwoole\Component\CoroutineRunner\Runner;
use EasySwoole\Component\CoroutineRunner\Task;

$runner = new Runner(10);
$runner->setOnException(function(\Throwable  $e, $task){
    echo $e->getMessage();
    echo PHP_EOL;
});

$max = 30;
$allTask = [];
while($max>0){
    $task = new Task(function() use ($max) {
        echo $max .PHP_EOL;
        co::sleep(1);
        // 将设这是一个curl爬取任务 return 爬取结果 可以在外部获取
        return 'ok';
    });
    $runner->addTask($task);
    $allTask[] = $task;
    $max--;
}

$runner->start(1);// 最长执行1秒  总共投递了30个 最大并发10个 需要3秒执行完,所以会有一部分将被丢弃  看下方参数说明列表

foreach($allTask as $key => $task){
    var_dump($task->getResult());
}

参数说明

Runner构造函数

可接收两个参数 __construct($concurrency = 64,$taskChannelSize = 1024)

  • concurrency 最大同时执行的协程数量
  • taskChannelSize 可投递的task队列长度

Runner->setOnException

设置异常回调 有两个参数 (\Throwable $e, Task $task)

Runner->start

开启已经投递的task协程的执行,有一个参数

  • float $waitTime = 30 最长执行时间,如果超过这个时间,剩余的task协程将被丢弃,不再执行。

Task构造函数

需要一个callable参数,用于调用执行,可以在闭包内return数据,外部使用 $task->getResult()获取

  • return 不等于 false的数据将会触发onSuccess
  • return false 将会触发 onFail

Task->setOnSuccess

需要一个callable参数

【非必选】 task执行完成回调

Task->setOnFail

需要一个callable参数

【非必选】 task执行失败回调

Task->getResult

获取call函数执行后return的数据