|
|
@@ -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);
|