> So I guess you want to use spawn() in a similar way as call_user_func() works.
yes
> This changes the behavior of file_get_contents() from the outside
No.
```php
function file_get_contents(string $filename): string
{
$fh = fopen();
// It creates an EPOLL event so it can wake us when the data
becomes available.
$event = ReactorAPI.create_event_from($fh);
$waker = Scheduler.getCurrentWaker();
// Event Driven logic inside.
$waker.add_event($event, function() use($waker) {
// Wakeup this coroutine
$waker.wake();
});
// suspend current coroutine
// zz..... z.....
Scheduler.suspend();
// Continue here after the IO event
// Now we have date, return
return fread($fh, ....);
}
```
This is pseudocode. You can assume it always works.
If you call `file_get_contents` directly, it behaves the same way.
So it does not matter where `file_get_contents` is called.
Since all PHP code together with TrueAsync runs inside coroutines,
`file_get_contents` will suspend the coroutine in which it was invoked.
When you call `spawn`, you simply run the function in another
coroutine, not in your own. But `spawn` has no effect on
`file_get_contents`.
We’re not at risk of DataRace yet :) We don’t have multithreading.
And most likely it won’t appear anytime soon.