Browse Source

Background job cancellation sample added

pull/15282/head
ahmetfarukulu 3 years ago
parent
commit
1c8ea86c35
  1. 24
      modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/Program.cs
  2. 19
      modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Quartz/Program.cs
  3. 41
      modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Jobs/LongRunningJob.cs
  4. 8
      modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Jobs/LongRunningJobArgs.cs

24
modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/Program.cs

@ -1,4 +1,9 @@
using System;
using System.Threading;
using Hangfire;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.BackgroundJobs.DemoApp.Shared.Jobs;
using Volo.Abp.Threading;
namespace Volo.Abp.BackgroundJobs.DemoApp.HangFire;
@ -7,12 +12,13 @@ class Program
static void Main(string[] args)
{
using (var application = AbpApplicationFactory.Create<DemoAppHangfireModule>(options =>
{
options.UseAutofac();
}))
{
options.UseAutofac();
}))
{
application.Initialize();
CancelableBackgroundJob(application.ServiceProvider);
Console.WriteLine("Started: " + typeof(Program).Namespace);
Console.WriteLine("Press ENTER to stop the application..!");
Console.ReadLine();
@ -20,4 +26,16 @@ class Program
application.Shutdown();
}
}
private static void CancelableBackgroundJob(IServiceProvider serviceProvider)
{
AsyncHelper.RunSync(async () =>
{
var backgroundJobManager = serviceProvider.GetRequiredService<IBackgroundJobManager>();
var jobId = await backgroundJobManager.EnqueueAsync(new LongRunningJobArgs { Value = "test-1" });
await backgroundJobManager.EnqueueAsync(new LongRunningJobArgs { Value = "test-2" });
Thread.Sleep(1000);
BackgroundJob.Delete(jobId);
});
}
}

19
modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Quartz/Program.cs

@ -1,4 +1,9 @@
using System;
using System.Threading;
using Microsoft.Extensions.DependencyInjection;
using Quartz;
using Volo.Abp.BackgroundJobs.DemoApp.Shared.Jobs;
using Volo.Abp.Threading;
namespace Volo.Abp.BackgroundJobs.DemoApp.Quartz;
@ -13,6 +18,7 @@ class Program
{
application.Initialize();
CancelableBackgroundJob(application.ServiceProvider);
Console.WriteLine("Started: " + typeof(Program).Namespace);
Console.WriteLine("Press ENTER to stop the application..!");
Console.ReadLine();
@ -20,4 +26,17 @@ class Program
application.Shutdown();
}
}
private static void CancelableBackgroundJob(IServiceProvider serviceProvider)
{
AsyncHelper.RunSync(async () =>
{
var backgroundJobManager = serviceProvider.GetRequiredService<IBackgroundJobManager>();
var jobId = await backgroundJobManager.EnqueueAsync(new LongRunningJobArgs { Value = "test-1" });
await backgroundJobManager.EnqueueAsync(new LongRunningJobArgs { Value = "test-2" });
Thread.Sleep(1000);
var scheduler = serviceProvider.GetRequiredService<IScheduler>();
await scheduler.Interrupt(new JobKey(jobId.Split('.')[1],jobId.Split('.')[0]));
});
}
}

41
modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Jobs/LongRunningJob.cs

@ -0,0 +1,41 @@
using System;
using System.Threading;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.BackgroundJobs.DemoApp.Shared.Jobs
{
public class LongRunningJob : BackgroundJob<LongRunningJobArgs>, ITransientDependency
{
public override void Execute(LongRunningJobArgs args, CancellationToken cancellationToken = default)
{
lock (Console.Out)
{
var oldColor = Console.ForegroundColor;
try
{
Console.WriteLine($"Long running {args.Value} start: {DateTime.Now}");
for (var i = 1; i <= 10; i++)
{
cancellationToken.ThrowIfCancellationRequested();
Thread.Sleep(1000);
Console.WriteLine($"{args.Value} step-{i} done: {DateTime.Now}");
}
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine($"Long running {args.Value} completed: {DateTime.Now}");
}
catch (OperationCanceledException)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"Long running {args.Value} cancelled!!!");
}
finally
{
Console.ForegroundColor = oldColor;
}
}
}
}
}

8
modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Jobs/LongRunningJobArgs.cs

@ -0,0 +1,8 @@
namespace Volo.Abp.BackgroundJobs.DemoApp.Shared.Jobs
{
[BackgroundJobName("LongJob")]
public class LongRunningJobArgs
{
public string Value { get; set; }
}
}
Loading…
Cancel
Save