Waiting and timeouts
Examples
Every example of this topic, with its output.
phasync::sleep#
phasync::run(function () {
phasync::go(function () { phasync::sleep(0.2); echo "slow\n"; });
phasync::go(function () { phasync::sleep(0.1); echo "fast\n"; });
}); // fast, slowphasync::idle#
phasync::run(function () {
phasync::go(function () { // keeps the loop busy for a while
for ($i = 0; $i < 1000; ++$i) {
phasync::yield();
}
echo "busy done\n";
});
phasync::idle(); // returns only once the loop above has nothing left
echo "idle\n"; // after "busy done"
});phasync::readable#
phasync::run(function () {
[$a, $b] = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP);
stream_set_blocking($a, false);
phasync::go(function () use ($b) { phasync::sleep(0.1); fwrite($b, "hello"); });
echo fread(phasync::readable($a), 1024), "\n"; // hello, after 0.1 seconds
});phasync::writable#
stream_set_blocking($socket, false);
$written = fwrite(phasync::writable($socket), $data); // may write less than all of $dataphasync::raiseFlag#
phasync::run(function () {
$ready = new stdClass();
phasync::go(function () use ($ready) {
phasync::awaitFlag($ready);
echo "ready\n";
});
echo phasync::raiseFlag($ready), " woken\n"; // 1 woken
});phasync::awaitFlag#
$done = new stdClass();
phasync::go(function () use ($done) {
phasync::sleep(0.1);
phasync::raiseFlag($done);
});
phasync::awaitFlag($done, 1.0); // returns after 0.1 secondsIOException#
phasync::run(function () {
try {
phasync::readable('not a stream');
} catch (phasync\IOException $e) {
echo $e->getMessage(), "\n"; // Not a valid stream resource
}
});SelectableInterface#
phasync::run(function () {
$group = new phasync\Util\WaitGroup();
$group->add();
phasync::go(function () use ($group) { phasync::sleep(0.01); $group->done(); });
var_dump($group->isReady()); // false: one task is left
$group->await();
var_dump($group->isReady()); // true
});TimeoutException#
phasync::run(function () {
$slow = phasync::go(fn () => phasync::sleep(1));
try {
phasync::await($slow, 0.01);
} catch (phasync\TimeoutException $e) {
echo "gave up\n";
}
phasync::cancel($slow);
});