Как сделать асинхронность?

У меня есть повторяющийся таск. В таске есть процесс которая получает данные с api. Однако пока api не вернет ответа, сервер зависате. Возможно ли сделать асинхронный таск в лайткор?

AsyncTask

Я в курсе про этот таск, но я не знаю как его использовать

Посмотри примеры в других плагинах

Я не нашел таких

https://mcsrvstat.us/

Мне надо получать актуальный список игроков

Так тема вовсе не про это

Даже если я буду использовать это, асинхронность это не принесет

Вот код если что

<?php

namespace PlayersList;

use pocketmine\scheduler\Task;
use pocketmine\utils\Utils;

class UpdateTask extends Task {
    public function __construct($plugin) {
        $this->main = $plugin;
    }
    
    public function onRun($currentTick) {
        $address = "test:19132";
        $online = json_decode(Utils::getURL("https://api.mcsrvstat.us/bedrock/2/{$address}"), true);
        $online = $online["online"] ? $online["players"]["list"] : null;
        $this->main->list = $online;
    }
}

Задержкп большая будет

<?php

namespace PlayersList;

use pocketmine\scheduler\AsyncTask;
use pocketmine\utils\Utils;
use pocketmine\Server;

class UpdateTask extends AsyncTask {
    public function __construct($plugin) {
        $this->main = $plugin;
    }
    
    public function onRun() {
        $address = "test:19132";
        $online = json_decode(Utils::getURL("https://api.mcsrvstat.us/bedrock/2/{$address}"), true);
        $this->setResult($online["online"] ? $online["players"]["list"] : null);
    }

    public function onCompletion(Server $server){
        $this->main->list = $this->getResult();
    }
}

тупые это наоборот медленнее

запрос к сайту + пока сайт сделает квери + возврат ответа

мой плагин используй, тут ассинхронно

1 лайк

SlSlots

Спасибо

Эта тема была автоматически закрыта через 12 часов после последнего ответа. В ней больше нельзя отвечать.