Переглянути джерело

refactor: 去除isClosure属性,改成在 数据层面 用 __job_closure__ 标记

runphp 1 тиждень тому
батько
коміт
76160b71f1
1 змінених файлів з 17 додано та 2 видалено
  1. 17 2
      src/Job/ClosureJob.php

+ 17 - 2
src/Job/ClosureJob.php

@@ -7,10 +7,25 @@ namespace SixShop\System\Job;
 use Closure;
 use SixShop\Core\Job\BaseJob;
 
+/**
+ * 闭包任务——无需创建 Job 类,直接投递闭包到队列执行。
+ *
+ * 适用场景:
+ *   - 无状态、不依赖外部上下文的简单异步操作(如打日志、调独立接口)
+ *
+ * 注意事项:
+ *   - 闭包通过 Opis\Closure 序列化,use 捕获的变量会成为序列化快照
+ *   - resource 类型、数据库连接等无法序列化,会导致失败
+ *   - 队列 Worker 进程中没有 HTTP 请求上下文(request、Auth 等不可用)
+ *   - 涉及数据库模型的场景,建议用专门的 Job 类只传 ID,执行时重新查询
+ *
+ * @example
+ *   ClosureJob::dispatch(function () {
+ *       Log::info('async task done');
+ *   });
+ */
 class ClosureJob extends BaseJob
 {
-    protected bool $isClosure = true;
-
     protected function execute(Closure $data)
     {
         return value($data);