Skip to content
Shiny.NET
Commercial SupportGuaranteed response times on Shiny bug fixes, straight from the maintainers. Plans from US$1,500 a year.See the plans

Jobs

GitHub GitHub stars for shinyorg/shiny
Downloads NuGet downloads for Shiny.Jobs
Frameworks
.NET
.NET MAUI
Blazor
Operating Systems
Android
iOS
tvOS
macOS
Linux
Windows
Web

Shiny Jobs allow you to run periodic background tasks. On Android, this is powered by WorkManager. On iOS, by BGTaskScheduler. On Windows, by COM-activated background tasks. On Linux, macOS, Blazor WebAssembly, and any other plain .NET host, jobs are run by an in-process managed JobManager driven by a recurring timer — jobs only execute while the host process is alive. On Blazor WebAssembly, Shiny.Jobs is the only package you need.

Jobs do not work on the iOS Simulator. You must test on a real device.

Platform Package Notes
Android Shiny.Jobs WorkManager — true OS-managed background execution
iOS Shiny.Jobs BGTaskScheduler — OS decides when
tvOS Shiny.Jobs BGTaskScheduler — same as iOS, including the Info.plist setup. Does not run on the simulator
Windows Shiny.Jobs COM-activated background tasks; tasks fire while the process is running (no background-mode triggering yet)
Linux / macOS / Plain .NET Shiny.Jobs In-process managed JobManager on a recurring timer
Blazor WebAssembly Shiny.Jobs Same in-process scheduler. No separate meta-package — reference Shiny.Jobs directly; battery and connectivity come from Shiny.Core. Call await host.Services.UseShiny() after Build() so the scheduler starts.
  • Cross-platform background job execution
  • Runtime criteria (internet access, charging, battery level)
  • Full dependency injection support
  • Stateful jobs (persists state across runs)
  • Foreground execution option
Changed files
  • MyApp/
Delegates/MyJob.cs
MyJob.cs
1using Shiny.Jobs;2​3namespace MyApp.Delegates;4​5public class MyJob : Job6{7    public MyJob(ILogger<MyJob> logger) : base(logger)8    {9    }10​11    protected override Task RunJob(CancellationToken cancelToken)12    {13        return Task.CompletedTask;14    }15}