enqueue static method

Future<String> enqueue(
  1. String name, {
  2. Map<String, dynamic> input = const {},
  3. TaskConstraints? constraints,
  4. RetryPolicy? retry,
  5. TaskPriority priority = TaskPriority.normal,
  6. List<String> tags = const [],
  7. Duration? initialDelay,
  8. String? uniqueId,
  9. UniquePolicy? uniquePolicy,
  10. TaskTimeout? timeout,
  11. DedupPolicy? dedupPolicy,
  12. ConcurrencyControl? concurrency,
  13. RateLimit? rateLimit,
  14. TaskQueue queue = TaskQueue.default_,
  15. TaskEncryption? encryption,
  16. TimeWindow? window,
})

Enqueues a one-off task for execution with advanced options.

Supports: timeout, deduplication, concurrency control, rate limiting, priority queues, encryption, and time windows.

Returns the execution ID which can be used to monitor or cancel the task. Example:

final id = await TaskFlow.enqueue(
  'syncData',
  input: {'userId': '123'},
  constraints: TaskConstraints(network: NetworkConstraint.connected),
  retry: RetryPolicy.exponential(maxAttempts: 3),
  timeout: TaskTimeout.moderate,
  dedupPolicy: DedupPolicy.byInput(ttl: Duration(minutes: 5)),
  concurrency: ConcurrencyControl.limited,
  rateLimit: RateLimit.moderate,
  queue: TaskQueue.high,
);

Implementation

static Future<String> enqueue(
  String name, {
  Map<String, dynamic> input = const {},
  TaskConstraints? constraints,
  RetryPolicy? retry,
  TaskPriority priority = TaskPriority.normal,
  List<String> tags = const [],
  Duration? initialDelay,
  String? uniqueId,
  UniquePolicy? uniquePolicy,
  TaskTimeout? timeout,
  DedupPolicy? dedupPolicy,
  ConcurrencyControl? concurrency,
  RateLimit? rateLimit,
  TaskQueue queue = TaskQueue.default_,
  TaskEncryption? encryption,
  TimeWindow? window,
}) async {
  _ensureInitialized();

  // TODO: Integrate advanced features with platform layer
  // For now, store them in memory for demonstration
  return await TaskFlowPlatform.instance.enqueue(
    name: name,
    input: input,
    constraints: constraints?.toMap(),
    retry: retry?.toMap(),
    priority: priority.name,
    tags: tags,
    initialDelayMs: initialDelay?.inMilliseconds,
    uniqueId: uniqueId,
    uniquePolicy: uniquePolicy?.name,
  );
}