php - swoole 裡如何判斷所有的非同步回呼已經完成?
phpcn_u1582
phpcn_u1582 2017-05-27 17:43:09
0
1
748

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

全部回覆(1)
PHPzhong

A1:
既然使用非阻塞,那還是用在回調內部進行業務邏輯比較好

<?php
(new swoole_mysql)->connect($conf, function ($db, $r) {
    
    //something
    (new swoole_mysql)->connect($conf, function ($db, $r) {
        //something
    });
});

A2:

既然是非同步操作,那麼回呼函數指不定是在哪個執行緒執行的,所以沒辦法保證上下文。建議使用協程語法去做。

總結:
題主得去了解swoole的非同步模型,不要用同步的思維去開發。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!