php - Comment déterminer si tous les rappels asynchrones ont été effectués dans Swoole?
phpcn_u1582
phpcn_u1582 2017-05-27 17:43:09
0
1
783

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_u1582
phpcn_u1582

répondre à tous(1)
PHPzhong

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!