<?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;
});
Bagaimana untuk menilai bahawa kedua-dua asyncIO di atas semuanya telah dilaksanakan supaya saya boleh mengeluarkan $hasil?
<?php
$a = 1;
(new swoole_mysql)->connect($conf, function($db, $r) use (&a) {
$a = 2;
});
while ($a != 2)
continue;
echo $a;
Ada apa-apa yang salah dengan kod di atas? Mengapa echo $a
tidak pernah dilaksanakan?
A1:
Memandangkan bukan sekatan digunakan, lebih baik menggunakan logik perniagaan di dalam panggilan balik
A2:
Oleh kerana ia adalah operasi tak segerak, fungsi panggil balik mungkin tidak dapat dilaksanakan dalam urutan mana, jadi konteksnya tidak boleh dijamin. Adalah disyorkan untuk menggunakan sintaks coroutine untuk melakukannya.
Ringkasan:
Penyoal perlu memahami model tak segerak swoole dan tidak menggunakan pemikiran segerak untuk berkembang.