Oops, I made a mistake in the logic of Scope
and coroutines.
According to the RFC, the following code behaves differently:
```php
currentScope()->spawn ... // This coroutine belongs to the Scope
spawn ... // This one is a child coroutine
```
I was sure that I had checked all the major edge cases. Sorry.
This will be fixed soon.
P.S. + 1 example:
<?php
declare(strict_types=1);
use Async\Scope;
use function Async\currentScope;
function fetchUrl(string $url): string {
$ctx = stream_context_create(['http' => ['timeout' => 5]]);
return file_get_contents($url, false, $ctx);
}
function fetchAllUrls(array $urls): array
{
$futures = [];
foreach ($urls as $url) {
$futures[$url] = (spawn fetchUrl($url))->getFuture();
}
await currentScope();
$results = [];
foreach ($futures as $url => $future) {
$results[$url] = $future->getResult();
}
return $results;
}
$urls = [
'https://example.com',
'https://php.net',
'https://openai.com'
];
$results = await spawn fetchAllUrls($urls);
print_r($results);
---
Ed.
>