Heim  >  Fragen und Antworten  >  Hauptteil

php - Wie kann ich feststellen, ob alle asynchronen Rückrufe in Swoole abgeschlossen wurden?

Q1

<?php

$result = [];

(new swoole_mysql)->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

<?php
$a = 1;
(new swoole_mysql)->connect($conf, function($db, $r) use (&a) {
    $a = 2;
});

while ($a != 2)
    continue;
    
echo $a;

Stimmt mit dem obigen Code etwas nicht? Warum wird echo $a nie ausgeführt?

phpcn_u1582phpcn_u15822724 Tage vor785

Antworte allen(1)Ich werde antworten

  • PHPz

    PHPz2017-05-27 17:45:09

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

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

    A2:

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

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

    Antwort
    0
  • StornierenAntwort