Orchard Core Background Tasks - Prompt Templates
Create Background Tasks
You are an Orchard Core expert. Generate background task implementations for Orchard Core.
Guidelines
- Background tasks implement
IBackgroundTaskand run on a schedule. - Tasks are registered in
Startup.csusingAddBackgroundTask<T>(). - The schedule is configured using
SetSchedule()with cron expressions orTimeSpan. - Background tasks run in the context of the tenant's service scope.
- Use
ILoggerfor logging task execution and errors. - Tasks should be idempotent and handle concurrent execution gracefully.
- Always seal classes.
Basic Background Task
using Microsoft.Extensions.Logging;
using OrchardCore.BackgroundTasks;
[BackgroundTask(
Schedule = "*/15 * * * *",
Description = "{{TaskDescription}}")]
public sealed class {{TaskName}} : IBackgroundTask
{
private readonly ILogger<{{TaskName}}> _logger;
public {{TaskName}}(ILogger<{{TaskName}}> logger)
{
_logger = logger;
}
public Task DoWorkAsync(IServiceProvider serviceProvider, CancellationToken cancellationToken)
{
_logger.LogInformation("Running {{TaskName}}...");
// Task logic here
return Task.CompletedTask;
}
}
Background Task with Service Dependencies
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using OrchardCore.BackgroundTasks;
using OrchardCore.ContentManagement;
[BackgroundTask(
Schedule = "0 */6 * * *",
Description = "{{TaskDescription}}")]
public sealed class {{TaskName}} : IBackgroundTask
{
private readonly ILogger<{{TaskName}}> _logger;
public {{TaskName}}(ILogger<{{TaskName}}> logger)
{
_logger = logger;
}
public async Task DoWorkAsync(IServiceProvider serviceProvider, CancellationToken cancellationToken)
{
// Resolve services from the service provider
var contentManager = serviceProvider.GetRequiredService<IContentManager>();
var session = serviceProvider.GetRequiredService<YesSql.ISession>();
_logger.LogInformation("Running {{TaskName}}...");
// Example: query and process content items
var items = await session
.Query<ContentItem, ContentItemIndex>(x =>
x.ContentType == "{{ContentType}}" && x.Published)
.ListAsync();
foreach (var item in items)
{
if (cancellationToken.IsCancellationRequested)
{
break;
}
// Process item
}
_logger.LogInformation("{{TaskName}} completed. Processed {Count} items.", items.Count());
}
}
Registering a Background Task
using OrchardCore.BackgroundTasks;
public sealed class Startup : StartupBase
{
public override void ConfigureServices(IServiceCollection services)
{
services.AddBackgroundTask<{{TaskName}}>();
}
}
Enabling Background Tasks Feature
{
"steps": [
{
"name": "Feature",
"enable": [
"OrchardCore.BackgroundTasks"
],
"disable": []
}
]
}
Common Cron Schedule Expressions
* * * * *— Every minute.*/5 * * * *— Every 5 minutes.*/15 * * * *— Every 15 minutes.0 * * * *— Every hour.0 */6 * * *— Every 6 hours.0 0 * * *— Daily at midnight.0 0 * * 0— Weekly on Sunday at midnight.0 0 1 * *— Monthly on the 1st at midnight.