php - Wie kann ich feststellen, ob alle asynchronen Rückrufe in Swoole abgeschlossen wurden?
phpcn_u1582
phpcn_u1582 2017-05-27 17:43:09
0
1
741

Q1

connect($conf, function ($db, $r) use (&$result) { $result[] = 1; }); (new swoole_mysql)->connect($conf, function ($db, $r) use (&$result) { $result[] = 2; });

Wie kann ich beurteilen, ob die beiden oben genannten AsyncIOs alle ausgeführt wurden, damit ich $result ausgeben kann?

Q2

connect($conf, function($db, $r) use (&a) { $a = 2; }); while ($a != 2) continue; echo $a;

Stimmt mit dem obigen Code etwas nicht? Warum wirdecho $anie ausgeführt?

phpcn_u1582
phpcn_u1582

Antworte allen (1)
PHPzhong

A1:
既然使用非阻塞,那还是用在回调内部进行业务逻辑比较好

connect($conf, function ($db, $r) { //something (new swoole_mysql)->connect($conf, function ($db, $r) { //something }); });

A2:

既然是异步操作,那么回调函数指不定是在哪个线程中执行的,所以没法保证上下文。建议使用协程语法去做。

总结:
题主得去了解一下swoole的异步模型,不要用同步的思维去开发。

    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!