<?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 ?
<?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é ?
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
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.