php - swoole 里如何判断所有的异步回调已经完成?

查看:134
本文介绍了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 永远不会执行?

解决方案

A1:
既然使用非阻塞,那还是用在回调内部进行业务逻辑比较好

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

A2:

既然是异步操作,那么回调函数指不定是在哪个线程中执行的,所以没法保证上下文。建议使用协程语法去做。

总结:
题主得去了解一下swoole的异步模型,不要用同步的思维去开发。

这篇关于php - swoole 里如何判断所有的异步回调已经完成?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆