public function collectTasks()
{
Timings::$schedulerAsyncTimer->startTiming();
foreach ($this->tasks as $task) {
if ($task->isFinished() and !$task->isRunning() and !$task->isCrashed()) {
if (!$task->hasCancelledRun()) {
$task->onCompletion($this->server);
}
$this->removeTask($task);
} elseif ($task->isTerminated() or $task->isCrashed()) {
$this->server->getLogger()->critical("Could not execute asynchronous task " . (new \ReflectionClass($task))->getShortName() . ": Task crashed");
$this->removeTask($task, true);
}
}
Timings::$schedulerAsyncTimer->stopTiming();
}