Continuing the discussion from [[PHP-DEV] PHP True Async RFC - Stage 2](
https://discourse.thephp.foundation/t/php-dev-php-true-async-rfc-stage-2/1573/16
):
[quote="Crell, post:16, topic:1573"]
// Creates an async scope, in which you can create coroutines.
[/quote]
Yes, I understand what this is about.
Here’s a more specific example: launching two coroutines and waiting for
both.
```php
$scope = new Scope();
$scope->spawn(fn() => ...);
$scope->spawn(fn() => ...);
await $scope;
```
The downside of this code is that the programmer might forget to write
`await $scope`.
Additionally, they constantly need to write `$scope->`.
This code can be replaced with syntactic sugar:
```
async {
spawn ...
spawn ...
};
```
Am I understanding this correctly? Does it look nice? I think yes.
And at the same time, if the closing bracket is missing, the compiler will
throw an error, meaning you can't forget to `await`.
That is the only advantage of this approach.
Now, let's talk about the downsides.
```
function task(): void {
spawn function() {
echo "What?";
};
async {
spawn ...
spawn ...
};
}
```
Let me explain.
You can write the `spawn` operator **outside** the `async` block. Why?
Because **nothing** can prevent you from doing so. It’s simply impossible.
After all, the function might already be executing inside another `async`
block outside its scope.
That’s exactly what happens an `async` block is essentially always present
as soon as `index.php` starts running.
It is necessary to determine whether this syntax truly provides enough
benefits compared to the direct implementation.
I will think about it.