Scheduled Task

In Grandnode you can create a task that will be invoked in some time interval. You can manage it from the admin panel.

 

Firstly create a class that implements a simple interface ISheduleTask, which has only one method Execute.


This simple example inserts log when Execute() will be invoked:



public partial class EndpointProvider : IEndpointProvider
namespace Misc.MyPlugin.Tasks
{
    public class SimpleTask : IScheduleTask
    {
        private readonly ILogger _logger;

        public SimpleTask(ILogger logger)
        {
            _logger = logger;
        }

        public async  Task Execute()
        {
            await _logger.InsertLog(LogLevel.Information, "Invoke my simple task");
        }
    }
}
	

Next, you must insert the SheduleTask object. The best place for it is the Installation() method from BasePlugin (more information in “Base plugin structure” article ) : 



var myTask = new ScheduleTask() {
                ScheduleTaskName = "My simple task",
                Type = "Misc.MyPlugin.Tasks.SimpleTask, Misc.MyPlugin",
                Enabled = false,
                StopOnError = true,
                TimeInterval = 10
            };
			
await _scheduleTaskService.InsertTask(myTask);
	

ScheduleTaskName - the name of your task that will be available in the tasks list we create a ScheduleTask object that has some significant properties:

Type – this is very important because the GrandNode background task uses this field for fetch implementation of ISheduleTask. So you must use template:  “namespace.ClassName, MainNamespace” in our case "Misc.MyPlugin.Tasks.SimpleTask, Misc.MyPlugin".

Enabled – indicate if the task is enabled for invoking, usually in installation we set it as false

StopOnError – assign true if you want to stop the task if an error occurs 

TimeInterval – interval in minutes


Some of those properties you can edit in GrandNode admin panel (Admin panel -> System -> Schedule Tasks


Finally register IScheduleTask in the container :

 

services.AddScoped<IScheduleTask, SimpleTask >();