Как правильно запустить несколько параллельных процессов в amphp?

Я учусь делать одновременно в Amphp. Только что нашел вариант использования, чтобы использовать его в моем тесте. Но, судя по выводу, мой код работает синхронно.

Вот мой код:

<?php
public function testPutDocument()
{
// sync all mapping
$service = app(SearchService::class);
$result = $service->syncMapping();
$this->assertInternalType('array', $result);
Loop::run(function () use ($service) {
foreach (array_keys($this->domainProvider()) as $domain) {
var_dump("dispatching $domain test..");
Loop::defer(function () use ($domain, $service) {
var_dump("running $domain test..");
// build model
$class = __NAMESPACE__."\ModelBuilder\\".ucfirst($domain);
$message = "Please create '$class' class for testing '$domain' domain mapping.";
$this->assertTrue(class_exists($class), $message);
$this->buildModels(new $class)
->each(function ($model) use ($domain, $service) {
// put document
try {
$result = $service->storeDocument($domain, $model);
$this->assertInstanceOf(Result::class, $result);
} catch (CredentialException $e) {
$message = $e->getMessage();
$message = "Failed put document for '$domain' domain. Details:\n\n$message";
$this->assertTrue(false, $message);
}
// delete document
try {
$result = $service->deleteDocument($domain, $model->id);
$this->assertInstanceOf(Result::class, $result);
} catch (CredentialException $e) {
$message = $e->getMessage();
$message = "Failed delete document for '$domain' domain. Details:\n\n$message";
$this->assertTrue(false, $message);
}
});
var_dump("done $domain test..");
});
var_dump("dispatched $domain test.");
}
});
}

Выход:

string(26) "dispatching contact test.."string(24) "dispatched contact test."string(30) "dispatching interaction test.."string(28) "dispatched interaction test."string(27) "dispatching timeline test.."string(25) "dispatched timeline test."string(26) "dispatching insight test.."string(24) "dispatched insight test."string(22) "running contact test.."string(19) "done contact test.."string(26) "running interaction test.."string(23) "done interaction test.."string(23) "running timeline test.."string(20) "done timeline test.."string(22) "running insight test.."string(19) "done insight test.."

Я думал, что если код был запущен одновременно, вывод будет выглядеть примерно так:

string(26) "dispatching contact test.."string(24) "dispatched contact test."string(30) "dispatching interaction test.."string(28) "dispatched interaction test."string(27) "dispatching timeline test.."string(25) "dispatched timeline test."string(26) "dispatching insight test.."string(24) "dispatched insight test."string(22) "running contact test.."string(26) "running interaction test.."string(23) "running timeline test.."string(22) "running insight test.."string(19) "done contact test.."string(23) "done interaction test.."string(20) "done timeline test.."string(19) "done insight test.."

Также блокирующей строкой является эта строка:

$result = $service->storeDocument($domain, $model);

Это запрос POST

$result = $service->deleteDocument($domain, $model->id);

Это УДАЛИТЬ запрос

Что мне не хватает?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]