Maison  >  Questions et réponses  >  le corps du texte

php - Comment déterminer si tous les rappels asynchrones ont été effectués dans Swoole?

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;
});

Comment juger que les deux asyncIO ci-dessus ont tous été exécutés pour que je puisse générer $result ?

Q2

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

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

Y a-t-il un problème avec le code ci-dessus ? Pourquoi echo $a n’est-il jamais exécuté ?

phpcn_u1582phpcn_u15822673 Il y a quelques jours756

répondre à tous(1)je répondrai

  • PHPz

    PHPz2017-05-27 17:45:09

    A1 :
    Étant donné que le non-blocage est utilisé, il est préférable d'utiliser la logique métier à l'intérieur du rappel

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

    A2 :

    Comme il s'agit d'une opération asynchrone, la fonction de rappel peut ne pas être exécutée dans quel thread, le contexte ne peut donc pas être garanti. Il est recommandé d'utiliser la syntaxe coroutine pour ce faire.

    Résumé :
    Le questionneur doit comprendre le modèle asynchrone de Swoole et ne pas utiliser la pensée synchrone pour se développer.

    répondre
    0
  • Annulerrépondre