<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # task 通過加載器加載并返回一個task的代理。 函數原型 ```php /** * 獲取一個task * @param $task * @return mixed|null|TaskProxy * @throws SwooleException */ public function task($task) ``` 其中$task是Task的類名,根據SD的傳統該類優先在app/Tasks中尋找,如果不存在則在Server/Tasks中尋找。 例子: ```php public function test_task() { $testTask = $this->loader->task('TestTask'); $testTask->test(); $testTask->startTask(null); } ``` 需要注意$this->loader->task('TestTask')返回的并不是TestTask的實例,其實返回的是一個TaskProxy,這個TaskProxy是個單例模式,所以調用task的時候不要對TaskProxy緩存,隨時用隨時獲取。 TestTask有個test方法,雖然說$testTask是個TaskProxy,但你可以把他當做是TestTask調用方法。 TaskProxy和Task的更加深入的用法見具體章節。 # Task Task是異步任務模塊服務于controller和model。 1.7以后的版本,Task中可以使用協程,所以寫法和Model基本一致。 Task類在task進程中是單例,每種類只會實例化一次。 ## TaskProxy > controller和model中獲取的Task其實是TaskProxy * startTask ```php /** * 開始異步任務 */ function startTask($callback,$id = -1) ``` * startTaskWait ```php /** * 開始同步任務 */ function startTaskWait($timeOurt = 0.5, $id = -1) ``` ## Controller和Model中的用法 AppTask.php ```php class AppTask extends Task { public function testTask() { return "test task\n"; } } ``` AppController.php ```php class AppController extends Controller { public function http_test_task() { $AppTask = $this->loader->task('AppTask'); $AppTask->testTask(); $AppTask->startTask(function ($serv, $task_id, $data) { $this->http_output->end($data); }); } } ``` ## TimerTask的用法 添加到配置文件timerTask.php中 ```php $config['timerTask'][] = [ 'task_name'=>'AppTask', 'method_name'=>'testTask', 'start_time'=>'Y-m-d 00:00:00', 'end_time'=>'Y-m-d 23:59:59', 'interval_time'=>'2', ]; ``` ## 協程模式 示例: ```php $task = $this->loader->task('TestTask'); $task->test(); $result = yield $task->coroutineSend(); ``` 使用協程會大大簡化代碼的書寫,提高代碼的可讀性。 上面的代碼通過yield關鍵字返回了異步回調的值。 _ **如果你的task是沒有結果返回的,請不要用協程,這樣會超時。**_ ##Task層級 1.7.4版本支持深層級的Task。 ```php $this->testTask = $this->loader->task('Test/TestTask'); ``` 如上會調用Test目錄下TestTask,請注意命名空間的規范。 在1.7.4版本之前需要這樣 ```php $this->testTask = $this->loader->task('Test\\TestTask');
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看