Vapm
  • About
    • Why is it called unblocking?
    • Next update?
    • Credit
    • Info
  • System
    • runEventLoop()
    • runSingleEventLoop()
    • setTimeout()
    • setInterval()
    • fetch()
    • read()
    • time() & timeEnd()
  • Asynchronous
    • getId()
    • await()
  • Promise
    • c()
    • getId()
    • getFiber()
    • isJustGetResult()
    • getTimeOut()
    • getTimeStart()
    • getTimeEnd()
    • setTimeEnd()
    • canDrop()
    • getStatus()
    • getResult()
    • getReturn()
    • getCallback()
    • resolve() & reject()
    • then() & catch() & finally()
    • useCallbacks()
    • all()
    • allSettled()
    • any()
    • race()
    • Some common methods
  • CoroutineGen
    • runBlocking()
    • runNonBlocking()
    • Deferred
    • Deferred Await All
    • repeat() & delay()
    • Channel
      • Example about Channel
    • AwaitGroup
      • Example
    • Mutex
      • Example
    • Goroutine vs CoroutineGen
      • Concurrency
  • Thread
    • How do I create a thread?
    • How do I share data between threads?
    • Advanced Thread
  • Worker
    • Example
  • Stream
    • read()
    • write()
    • append()
    • delete()
    • create()
    • overWrite()
  • FAQ
    • Why System::runEventLoop() and System::runSingleEventLoop() ?
    • Do you want concurrency?
  • PocketMine-PMMP
Powered by GitBook
On this page
  1. CoroutineGen

runNonBlocking()

Runs a new coroutine and non-blocks the current thread. This static function should not be used from a coroutine.

CoroutineGen::runNonBlocking(
    function() : \Generator {
        $return = yield file_get_contents('http://www.weather.com.cn/data/cityinfo/101270101.html');
        var_dump($return);
    },
    function() : \Generator {
        yield var_dump("END!");
    },
    function() {
        var_dump("START!");
    },
    function() {
        var_dump("Hello World!");
    }
);

Output:

string(6) "START!"
string(12) "Hello World!"
string(10989) "<!DOCTYPE HTML>
<html>
<head> ...."

string(4) "END!"

Example other:

function a() {
    for ($i = 0; $i <= 5; $i++) {
        yield var_dump("A");
    }
}

function b() {
    for ($i = 0; $i <= 5; $i++) {
        yield var_dump("B");
    }
}

CoroutineGen::runNonBlocking(
    a(),
    b(),
    function() {
        var_dump("C");
    }
);

var_dump("Running after coroutines");

Output:

string(1) "C"
string(1) "A"
string(1) "A"
string(1) "B"
string(1) "B"
string(1) "A"
string(24) "Running after coroutines"
string(1) "B"
string(1) "A"
string(1) "B"
string(1) "A"
string(1) "B"
string(1) "A"
string(1) "B"
PreviousrunBlocking()NextDeferred

Last updated 9 months ago