Как вызвать метод класса внутри рабочего CallableTask в amphp / параллельный Amp \ Loop? - PullRequest
1 голос
/ 15 мая 2019

Я использую 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 голосов
/ 14 июня 2019

Да, это в основном правильно.Вам не нужно & перед $this.

Вместо использования CallableTask, вы также можете реализовать свой собственный Task.

Пожалуйста, имейте в виду, что вашвесь объект сериализуется при отправке работнику и десериализации в работнике, поэтому изменения в объекте, сделанные в дочернем элементе, не будут видны в родительском и наоборот.

...