PocketMine-MP 5.21.2 git-a6534ecbbbcf369264567d27e5ed70f7f5be9816
|
Public Member Functions | |
checkProgressUpdates () | |
getResult () | |
hasResult () | |
isFinished () | |
isSubmitted () | |
onCompletion () | |
onProgressUpdate ($progress) | |
onRun () | |
publishProgress (mixed $progress) | |
run () | |
setResult (mixed $result) | |
setSubmitted () | |
Protected Member Functions | |
fetchLocal (string $key) | |
reallyDestruct () | |
storeLocal (string $key, mixed $complexData) | |
Class used to run async tasks in other threads.
An AsyncTask is run by a thread pool of reusable threads, and doesn't have its own dedicated thread. A thread is usually chosen from the pool at random to run the task (though a specific thread in the pool may be selected manually, if needed). Reusing threads this way has a much lower performance cost than starting an entirely new thread for every operation. AsyncTasks are therefore suitable for brief CPU-bound tasks, such as world generation, compression/decompression of data, etc.
AsyncTask SHOULD NOT be used for I/O-bound tasks, such as network I/O, file I/O, database I/O, etc. The server's central AsyncPool is used for things like compressing network packets for sending, so using AsyncTask for I/O will slow the whole server down, stall chunk loading, etc.
An AsyncTask SHOULD NOT run for more than a few seconds. For tasks that run for a long time or indefinitely, create a dedicated thread instead.
The Server instance is not accessible inside AsyncTask::onRun()
. It can only be accessed in the main server thread, e.g. during AsyncTask::onCompletion()
or AsyncTask::onProgressUpdate()
. This means that whatever you do in onRun() must be able to work without the Server instance.
If you want to store non-thread-safe objects to access when the task completes, store them using AsyncTask::storeLocal
.
Definition at line 61 of file AsyncTask.php.
|
final |
Definition at line 209 of file AsyncTask.php.
pocketmine\scheduler\AsyncTask::checkProgressUpdates | ( | ) |
Definition at line 151 of file AsyncTask.php.
|
protected |
Retrieves data stored in thread-local storage.
If you used storeLocal(), you can use this on the same thread to fetch data stored. This should be used during onProgressUpdate() and onCompletion() to fetch thread-local data stored on the parent thread.
InvalidArgumentException if no data were stored by this AsyncTask instance.
Definition at line 200 of file AsyncTask.php.
pocketmine\scheduler\AsyncTask::getResult | ( | ) |
Definition at line 102 of file AsyncTask.php.
pocketmine\scheduler\AsyncTask::hasResult | ( | ) |
Definition at line 95 of file AsyncTask.php.
pocketmine\scheduler\AsyncTask::isFinished | ( | ) |
Returns whether this task has finished executing, whether successfully or not. This differs from isRunning() because it is not true prior to task execution.
Definition at line 91 of file AsyncTask.php.
pocketmine\scheduler\AsyncTask::isSubmitted | ( | ) |
Definition at line 117 of file AsyncTask.php.
pocketmine\scheduler\AsyncTask::onCompletion | ( | ) |
Actions to execute when completed (on main thread) Implement this if you want to handle the data in your AsyncTask after it has been processed
Reimplemented in pocketmine\network\mcpe\auth\ProcessLoginTask, pocketmine\network\mcpe\ChunkRequestTask, pocketmine\network\mcpe\compression\CompressBatchTask, pocketmine\network\mcpe\encryption\PrepareEncryptionTask, pocketmine\scheduler\BulkCurlTask, pocketmine\updater\UpdateCheckTask, pocketmine\world\generator\PopulationTask, and pocketmine\world\light\LightPopulationTask.
Definition at line 130 of file AsyncTask.php.
pocketmine\scheduler\AsyncTask::onProgressUpdate | ( | $progress | ) |
Called from the main thread after AsyncTask::publishProgress
is called. All AsyncTask::publishProgress
calls should result in AsyncTask::onProgressUpdate
calls before AsyncTask::onCompletion
is called.
mixed | $progress | The parameter passed to AsyncTask#publishProgress . It is serialize()'ed and then unserialize()'ed, as if it has been cloned. |
Definition at line 168 of file AsyncTask.php.
|
abstract |
Actions to execute when run
Reimplemented in pocketmine\network\mcpe\auth\ProcessLoginTask, pocketmine\network\mcpe\ChunkRequestTask, pocketmine\network\mcpe\compression\CompressBatchTask, pocketmine\network\mcpe\encryption\PrepareEncryptionTask, pocketmine\scheduler\BulkCurlTask, pocketmine\scheduler\DumpWorkerMemoryTask, pocketmine\scheduler\GarbageCollectionTask, pocketmine\stats\SendUsageTask, pocketmine\updater\UpdateCheckTask, pocketmine\world\generator\GeneratorRegisterTask, pocketmine\world\generator\GeneratorUnregisterTask, pocketmine\world\generator\PopulationTask, and pocketmine\world\light\LightPopulationTask.
pocketmine\scheduler\AsyncTask::publishProgress | ( | mixed | $progress | ) |
Call this method from AsyncTask::onRun
(AsyncTask execution thread) to schedule a call to AsyncTask::onProgressUpdate
from the main thread with the given progress parameter.
mixed | $progress | A value that can be safely serialize()'ed. |
Definition at line 140 of file AsyncTask.php.
|
protected |
Override this to do normal __destruct() cleanup from a child class.
Definition at line 217 of file AsyncTask.php.
pocketmine\scheduler\AsyncTask::run | ( | ) |
Definition at line 78 of file AsyncTask.php.
pocketmine\scheduler\AsyncTask::setResult | ( | mixed | $result | ) |
Definition at line 109 of file AsyncTask.php.
pocketmine\scheduler\AsyncTask::setSubmitted | ( | ) |
Definition at line 113 of file AsyncTask.php.
|
protected |
Saves mixed data in thread-local storage. Data stored using this storage is only accessible from the thread it was stored on. Data stored using this method will not be serialized. This can be used to store references to variables which you need later on on the same thread, but not others.
For example, plugin references could be stored in the constructor of the async task (which is called on the main thread) using this, and then fetched in onCompletion() (which is also called on the main thread), without them becoming serialized.
Scalar types can be stored directly in class properties instead of using this storage.
Objects stored in this storage can be retrieved using fetchLocal() on the same thread that this method was called from.
Definition at line 186 of file AsyncTask.php.
Referenced by pocketmine\network\mcpe\auth\ProcessLoginTask\__construct(), pocketmine\network\mcpe\ChunkRequestTask\__construct(), pocketmine\network\mcpe\encryption\PrepareEncryptionTask\__construct(), pocketmine\scheduler\BulkCurlTask\__construct(), pocketmine\world\generator\PopulationTask\__construct(), and pocketmine\world\light\LightPopulationTask\__construct().