如何在amphp / parallel Amp \ Loop中的工人CallableTask中调用类方法?

时间:2019-05-15 15:54:35

标签: php amphp

我正在使用Amp \ Loop,想知道用$ worker-> enqueue(new CallableTask())中的参数调用类方法的正确方法是什么。
这是一个示例:

<?php
require_once "vendor/autoload.php";
use Amp\Loop;
use Amp\Parallel\Worker\CallableTask;
use Amp\Parallel\Worker\DefaultWorkerFactory;


class Test_Amp {

  public function __construct() {
    $this->run_test();
  }
  public function run_test() {
    Amp\Loop::run(function () {
    $a = "";
    $b = "";
    $factory = new DefaultWorkerFactory();
    $worker = $factory->create();
    $result = yield $worker->enqueue(new CallableTask(array(&$this, 'run_task'), [$a, $b])); // Is it the correct way of calling run_task() ?
    $code = yield $worker->shutdown();
    });
  }

  public function run_task($a, $b) {
    //do something with $a and $b
  }
}

new Test_Amp();

1 个答案:

答案 0 :(得分:0)

是的,这基本上是正确的。您不需要&前面的$this

除了使用CallableTask,您还可以实现自己的Task

请注意,您的整个对象在发送给worker时都会被序列化,并在worker中反序列化,因此对子对象所做的修改不会在父对象中可见,反之亦然。