Coroutine 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 Server
$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Swoole::class; // Or Swow::class or 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 Timeout');
        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;
}