सहकारी प्रतीक्षा समूह WaitGroup

WaitGroup और Barrier समान हैं, ये एक सहकारी समन्वय उपकरण है, जो असिंक्रोनस कार्यों में सभी सहकारी कार्यों के पूरा होने का इंतज़ार करने की अनुमति देता है।

Barrier से भिन्न, WaitGroup कोड लेखकों द्वारा गिनती के बढ़ने और घटने को नियंत्रित किया जा सकता है।

ध्यान दें
यह स्वचालित रूप से नीचे की स्तर पर ड्राइवर प्रकार को पहचानता है, केवल Swoole/Swow/Fiber ड्राइवर का समर्थन करता है

संकेत
इस विशेषता के लिए workerman>=5.1.0 की आवश्यकता है

<?php
use Workerman\Connection\TcpConnection;
use Workerman\Coroutine\Barrier;
use Workerman\Coroutine;
use Workerman\Events\Swoole;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

// Http सर्वर
$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Swoole::class; // या Swow::class या Fiber::class
$worker->onMessage = function (TcpConnection $connection, Request $request) {
    $wg = new WaitGroup();
    for ($i=1; $i<5; $i++) {
        $wg->add();
        Coroutine::create(function () use ($wg, $i) {
            try {
            // कुछ करें
            } finally {
                $wg->done();
            }
        });
    }
    // सभी सहकारी कार्यों के पूरा होने का इंतज़ार करें, 10 सेकंड के बाद समय सीमा
    $result = $wg->wait(10.0);
    if (!$result) {
        $connection->send('WaitGroup समय सीमा समाप्त');
        return;
    }
    $connection->send('सभी कार्य पूर्ण');
};

Worker::runAll();

इंटरफेस विवरण

interface WaitGroupInterface
{

    /**
     * गिनती बढ़ाना
     *
     * @param int $delta
     * @return bool
     */
    public function add(int $delta = 1): bool;

    /**
     * गिनती पूरी करना
     *
     * @return bool
     */
    public function done(): bool;

    /**
     * गिनती वापस करना
     *
     * @return int
     */
    public function count(): int;

    /**
     * सहकारी प्रतीक्षा
     *
     * @param int|float $timeout सेकंड
     * @return bool समय सीमा:false सफलता:true
     */
    public function wait(int|float $timeout = -1): bool;
}