Heim > Fragen und Antworten > Hauptteil
<?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?
<?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?
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的异步模型,不要用同步的思维去开发。