Managing Jobs
Overview
Section titled “Overview”IJobManager provides full control over registered jobs — run them on demand, query their state, and observe their lifecycle.
Requesting Access
Section titled “Requesting Access”IJobManager jobManager; // injected
var access = await jobManager.RequestAccess();if (access != AccessState.Available){ // Handle denied permissions}Running Jobs
Section titled “Running Jobs”Run All
Section titled “Run All”// Run all registered jobs (in parallel by default)var results = await jobManager.RunAll();
// Run sequentiallyvar results = await jobManager.RunAll(runSequentially: true);
foreach (var result in results){ if (result.Success) Console.WriteLine($"{result.Job?.Identifier} completed"); else Console.WriteLine($"{result.Job?.Identifier} failed: {result.Exception}");}Run a Specific Job
Section titled “Run a Specific Job”var result = await jobManager.Run("MyJob");if (result.Success) Console.WriteLine("Job completed successfully");Run a One-Shot Task (iOS)
Section titled “Run a One-Shot Task (iOS)”On iOS, RunTask uses BGTaskScheduler to run a one-time background task.
jobManager.RunTask("quick-sync", async cancelToken =>{ await SyncData(cancelToken);});Querying Jobs
Section titled “Querying Jobs”// Get all registered jobsvar jobs = jobManager.GetJobs();
// Get a specific jobvar job = jobManager.GetJob("MyJob");if (job != null){ Console.WriteLine($"Job: {job.Identifier}, Type: {job.JobType.Name}");}Cancelling Jobs
Section titled “Cancelling Jobs”// Cancel a specific jobjobManager.Cancel("MyJob");
// Cancel all jobsjobManager.CancelAll();Observing Job Lifecycle
Section titled “Observing Job Lifecycle”// Fires just before a job startsjobManager.JobStarted.Subscribe(job =>{ Console.WriteLine($"Starting: {job.Identifier}");});
// Fires when a job finishes (success or failure)jobManager.JobFinished.Subscribe(result =>{ if (result.Success) Console.WriteLine($"Finished: {result.Job?.Identifier}"); else Console.WriteLine($"Failed: {result.Job?.Identifier} - {result.Exception?.Message}");});
// Check if the job manager is currently runningvar isRunning = jobManager.IsRunning;