swoole_server->taskwait

函数原型:

function Server->taskwait(mixed $data, float $timeout = 0.5, int $dstWorkerId = -1) : string | bool

taskwaittask方法作用相同,用于投递一个异步的任务到task进程池去执行。与task不同的是taskwait是同步等待的,直到任务完成或者超时返回。 $result为任务执行的结果,由$serv->finish函数发出。如果此任务超时,这里会返回false

4.0.4以下版本中taskwait是阻塞接口,如果你的Server是全异步的请使用swoole_server::taskswoole_server::finish,不要使用taskwait
4.0.4以上版本中taskwait底层会进行协程调度,实现完全的异步IO
taskwait方法不能在task进程中调用

协程

4.0.4版本开始taskwait方法将支持协程调度,在协程中调用Server->taskwait()时将自动进行协程调度,不再阻塞等待。

借助协程调度器,taskwait可以实现并发调用。

特例

如果onTask中没有任何阻塞IO操作,底层仅有2次进程切换的开销,并不会产生IO等待,因此这种情况下 taskwait 可以视为非阻塞。实际测试onTask中仅读写PHP数组,进行10万次taskwait操作,总耗时仅为1秒,平均每次消耗为10微秒