搜尋

首頁  >  問答  >  主體

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

如何判斷上面兩個 asyncIO 已經全部執行結束了,以便於我輸出 $result ?

Q2

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

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

以上這段程式碼有什麼錯誤嗎?為什麼 echo $a 永遠不會執行?

phpcn_u1582phpcn_u15822828 天前841

全部回覆(1)我來回復

  • PHPz

    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的非同步模型,不要用同步的思維去開發。

    回覆
    0
  • 取消回覆