php - 如何在 amphp/parallel Amp\Loop 中调用 worker CallableTask 中的类方法?
问题描述
我正在使用 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();
解决方案
是的,这基本上是正确的。你不需要&
前面的$this
。
除了使用CallableTask
,您还可以实现自己的Task
.
请注意,您的整个对象在发送给工作人员时被序列化并在工作人员中反序列化,因此对子对象所做的修改在父对象中不可见,反之亦然。
推荐阅读
- php - fopen() 使用 Vfs 失败,'无法打开流:“org\bovigo\vfs\vfsStreamWrapper::stream_open”'
- html - 如何在 vue.js 中悬停特定悬停卡时显示内容?
- kendo-grid - Kendo UI JQuery - 网格一键触发多个“读取”、“创建”、“更新”和“销毁”操作
- javascript - 仅在 Web 服务器上运行而不在本地运行的脚本
- javascript - 标题文本没有在reactJs中点击按钮?
- spring-boot - 如何从 Spring WebApplicationContext 中获取 DispatcherServlet?
- android - 当起始滑动点位于可点击视图上时,如何允许滑动视图?
- javascript - 在博客的未来帖子中的主页中显示模糊的图像
- fabricjs - 如何使在fabric js中对多个对象应用过滤器不那么滞后?
- java - @OneToOne 注释错误:引用未知实体: