omegaalfa/async-task

使用 Fibers 的 PHP 异步任务管理器

dev-main 2024-01-15 02:09 UTC

This package is not auto-updated.

Last update: 2024-09-23 05:55:30 UTC


README

使用 Fibers 管理一组异步任务

描述

此存储库包含用于使用 Fibers 管理异步任务的简单代码。代码由三个类组成

  • AsyncTaskManager: 管理一组异步任务。
  • AsyncTask: 表示一个异步任务。
  • Loop: 提供一个高级接口来创建和执行异步任务。

AsyncTaskManager 负责维护一个异步任务池。任务通过 submit() 方法添加到池中。然后 AsyncTaskManager 以合作方式在池中执行任务,直到所有任务完成。

AsyncTask 表示一个异步任务。任务通过将任务逻辑作为构造函数中的可调用对象实例化 AsyncTask 对象来创建。

Loop 提供一个更友好的创建和执行异步任务的接口,简化了任务的定义和结果的获取。

功能

  • 将异步任务提交给管理器。
  • 在后台执行任务,直到所有任务完成。
  • 使用 Fibers 功能实现异步操作。

先决条件

PHP 8.1 或更高版本

安装

有关如何安装存储库的说明。

示例

use omegaalfa\AsyncTask\AsyncTask;
use omegaalfa\AsyncTask\AsyncTaskManager
// Cria uma instância do AsyncTaskManager
$taskManager = new AsyncTaskManager();

// Define uma tarefa assíncrona simples
$asyncTask = new AsyncTask(function () {
    // Código a ser executado assincronamente
    echo "Tarefa assíncrona concluída!\n";
});

// Submete a tarefa ao AsyncTaskManager
$taskManager->submit($asyncTask);

// Executa todas as tarefas em segundo plano
$taskManager->run();

使用 Loop 类

//usando o Loop
use omegaalfa\AsyncTask\Loop;

// Cria uma instância do Loop
$loop = new Loop();

// Adiciona tarefa assíncrona ao Loop
$loop->defer(function () {
    // Código a ser executado assincronamente
    return "Tarefa assíncrona concluída!";
});

// Adiciona tarefa com nome ao Loop
$loop->addTask('minhaTarefa', function () {
    // Código da tarefa com nome
    return "Tarefa com nome concluída!";
});

// Executa tarefas em segundo plano, aguarda até que todas sejam concluídas
$loop->run();

// Obtém resultados
$resultado = $loop->getResult();

贡献

如果您想为改进或修复做出贡献,请随意创建 pull request 或在存储库中打开 issue。

许可证

本项目采用 MIT 许可证。