> Edmond Dantes <[email protected]> hat am 22.11.2025 14:55 CET geschrieben:
> 
>  
> > 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.


>     // Continue here after the IO event

>From my understanding, the code does not continue if there is no io event? 
>Will it use default_socket_timeout from php.ini and/or use the timeout 
>specified in the stream context?

Can I mix sync IO and async IO in one function? e.g. if the server uses a mixed 
storage of SSDs and HDDs and I only want async io for the SSDs?

Best Regards
Thomas

Reply via email to